如何在C中find函数的返回地址?

我正在尝试在C和GCC中使用less量的AT&T风格的内联汇编,在这里阅读一篇关于CodeProject的文章。 我希望这样做的主要原因是findEIP寄存器的旧值,以便能够在我的代码中拥有可靠的指令地址。 我已经写了一个简单的示例程序来展示我对这个概念迄今为止的理解:

#include <stdio.h> #include <stdlib.h> int mainReturnAddress = 0; int main() { asm volatile ( "popl %%eax;" "pushl %%eax;" "movl %%eax, %0;" : "=r" ( mainReturnAddress ) ); printf( "Address : %d\n", mainReturnAddress ); return 0; } 

这个例子的目的是从堆栈顶部popup4个字节,表示从EIP寄存器保存的32位返回地址,然后将其推回堆栈。 之后,我将其存储在全局mainReturnAddressvariables中。 最后,我打印存储在mainReturnAddress中的值。

我从这个代码4200560收到的输出。

这段代码是否达到上述目的,是Windows平台32位上的交叉处理器吗?

Solutions Collecting From Web of "如何在C中find函数的返回地址?"