Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用格式字符串打印返回地址_C_Function_Stack_Return - Fatal编程技术网

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

C 使用格式字符串打印返回地址,c,function,stack,return,C,Function,Stack,Return,我需要打印出存储在函数堆栈中的返回地址? 我应该遵循的打印格式是 void function() { int *RetPtr = 0; printf("Return address 0x%08x\n", (unsigned int *)(&RetPtr+Return_addr_Offset)); /*Code goes here*/ } 有人能帮忙吗!我不应该使用内置函数。 我该怎么做呢?如果你不能使用内置函数,

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

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

}
有人能帮忙吗!我不应该使用内置函数。
我该怎么做呢?

如果你不能使用内置函数,这对我来说就像是家庭作业

在任何情况下,作为一个指针并没有什么神奇之处;你只需要打印出一个十六进制数


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

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

有没有办法计算出八个十六进制数字?我在想,如果我声明一个char数组并将其分配给RetPtr,然后基本上计算返回地址的偏移量(一些数学)。试着打印出来。它真的不起作用…这不是特定于体系结构、处理器类型和/或编译器吗?您是想知道如何在没有printf的情况下打印,还是想知道如何计算Return\u addr\u Offset?我想知道如何计算Return\u addr\u Offset?我需要使用printf函数……我在Linux ubuntu 2.6.32-21-generic上运行它#32 ubuntu SMP UTC 2010 i686 GNU/LinuxI在Linux ubuntu 2.6.32-21-generic#32 ubuntu SMP UTC 2010 i686 GNU上运行它/Linux@Merlyn:是,以及编译器的优化设置。