【发布时间】:2013-06-09 03:35:32
【问题描述】:
假设在一段 C 代码中,我有一个调用 bar 的函数 foo。在 bar 中,我可以使用汇编来获取 bar 将返回的地址。如何使用这些信息来确定 foo 的地址?
一种方法是获取 foo 将返回的返回地址,并从调用 foocall 指令的操作码中获取地址/强>。但是,这需要知道使用哪种调用方法(例如偏移/绝对),因此不可靠。有没有更简单的方法来确定调用者的地址?
编辑:我忘了提到这个问题是关于 32 位 Intel unix 机器上的 IA32 组装的。
【问题讨论】:
-
由于这个问题涉及到汇编代码,或许您可以告诉我们我们的目标是什么汇编语言?
-
这将取决于处理器。没有通用的方法可以成功地做到这一点。
-
@StevenBurnap,你不是说依赖于架构吗?
-
@user2467539 使用
&test_func还不够吗?您提出的问题具有挑战性,因为单个函数中可能有多个返回指令。我想我只是好奇这是一个实际问题还是一个教育问题。 -
@TaylorFlores 问题是这样做时我不知道 foo 的名称,因此不能使用这样的符号。虽然不是作业问题,但我想这更像是一个教育问题,因为在实践中我们通常知道我们正在使用的所有功能。