Печать обратного адреса с использованием строки формата - PullRequest
3 голосов
/ 18 февраля 2011

Требуется ли распечатать адрес возврата, хранящийся в стеке для функции?Формат, которому я должен следовать, чтобы напечатать это

void function() 
{
      int *RetPtr = 0;
      printf("Return address 0x%08x\n",
                 (unsigned int *)(&RetPtr+Return_addr_Offset));
      /*Code goes here*/

}

Может кто-нибудь, пожалуйста, помогите!Я не должен использовать встроенную функцию.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2011

Вы должны решить, что Return_addr_Offset должно быть. RetPtr размещается в стеке, поэтому, вычисляя некоторое смещение относительно адреса RetPtr, вы можете распечатать адрес вызывающей функции, который был сохранен в стеке при его вызове в вашу функцию. Фактическое значение смещения, которое вам нужно, зависит от архитектуры вашего компьютера и соглашения о вызовах.

0 голосов
/ 18 февраля 2011

Для меня это пахнет домашней работой, если вы не можете использовать встроенные функции.

В любом случае, нет ничего волшебного в том, чтобы быть указателем; вам просто нужно распечатать шестнадцатеричное число.

Не зная, какие функции вам разрешено использовать, трудно помочь. В основном вам нужно обработать восемь шестнадцатеричных цифр, а затем вывести их.

...