gpt4 book ai didi

c - 如何在C中找到函数的返回地址?

转载 作者:可可西里 更新时间:2023-11-01 14:49:59 24 4
gpt4 key购买 nike

我正在尝试通过阅读 CodeProject 上的一篇文章在 C 和 GCC 中使用少量 AT&T 风格的内联汇编 here .我希望这样做的主要原因是找到 EIP 寄存器的旧值,以便能够在我的代码中获得可靠的指令地址。到目前为止,我已经编写了一个简单的示例程序来展示我对这个概念的理解:

#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;
}

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

我从此代码 4200560 收到的输出。

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

最佳答案

在 GCC 中,您应该使用 __builtin_return_address而不是尝试使用内联汇编。

关于c - 如何在C中找到函数的返回地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com