【发布时间】:2020-11-02 19:16:31
【问题描述】:
我有一个函数叫做:
doSomething()
我的理解是:在汇编中,this会跳转到函数位置,并将函数的返回地址存储在某个寄存器中,这样函数完成后,程序计数器可以返回到主程序。
如何获取该函数的返回地址并将其放入变量中以便我可以使用它?
__builtin_return_address 似乎不起作用。当我把它翻译成汇编时,它不知道该怎么做。我相信我不能使用 GCC。我什至没有使用 printf,因为它不是标准 C 库的一部分。
目前,我试图通过在这个变量中放入各种数字来猜测它的返回地址是什么。
【问题讨论】:
-
C 语言没有定义实现细节,如返回地址、堆栈等。它确实定义了语言结构的语义(行为)。如果不使用程序集或一些低级(和特定于编译器的)内在函数,恐怕你无法获得返回地址。你想用退货地址做什么?也许有一些 C 功能可以用来实现你想要的。
-
"将函数的返回地址存储在某个寄存器中" 大多数实现会将返回地址存储(推送)到堆栈中。 RET 指令然后获取(弹出)地址并跳转到它。
-
你想用这个地址做什么?注意,它只存在于
doSomething在执行的时候,也就是说,如果你完全可以得到一个函数的返回地址,那么你只能在函数本身内部得到它。 -
你可能想看看'#include
`中的 setjump()和longjump(),它们是返回到直接调用函数以外的任何东西的可移植方式。 -
没有可移植的 C 方案来获取函数的返回地址。
标签: c