使用格式字符串打印返回地址

时间:2011-02-18 04:27:16

标签: c function stack return

我需要打印存储在堆栈中的函数的返回地址吗? 我打算遵循的格式是

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

}

有人可以帮忙!我不应该使用内置功能。 我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

如果您不能使用内置功能,这对我来说就像是作业。

无论如何,作为一个指针,没有什么魔力;你只需打印一个十六进制数字。

如果您不允许使用哪些功能,则很难提供帮助。你基本上需要计算八个十六进制数字然后输出它们。

答案 1 :(得分:0)

你需要弄清Return_addr_Offset应该是什么。 RetPtr在堆栈上分配,因此通过计算相对于RetPtr地址的某个偏移量,您可以打印出调用函数时存储在堆栈中的调用函数的地址。您需要的偏移量的实际值取决于您所使用的计算机体系结构和调用约定。