关于CALL声明的问题

时间:2011-01-04 04:19:22

标签: assembly

我在VC ++中有以下代码

Func5(){ StackWalk(); }
Func4{ Func5();}

我是x86汇编语言的初学者。我试图找出Func5()的起始地址。我从堆栈帧中获取Func5()的返回地址。在此返回地址之前,应该有一个CALL语句。所以我在返回地址之前提取出字节。

有时它就像E8 ff ff ff d8一样接近电话。因此,对于此语句,我从函数的返回地址中减去偏移量0x28,以获取Func5()的基址(它驻留在内存中)。

问题是我不知道如何计算间接NEAR呼叫。我一直试图找出如何做一段时间。所以我在返回地址之前提取了前5个字节,它们是ff 75 08 ff d2我认为这代表CALL ECX (ff d2),但我不确定。

如果有人能告诉我这是什么类型的CALL声明以及如何通过这种调用计算函数的基地址,我将非常感激。

2 个答案:

答案 0 :(得分:1)

告诉编译器和链接器生成详细的映​​射文件。我不知道最近的版本,但过去可以请求链接的汇编语言转储,包括操作码。

答案 1 :(得分:1)

对于拆卸事物,最简单的方法是使用反汇编程序。

假设32位80x86,NDISASM说“ff 75 08 ff d2”是:

00000000  FF7508            push dword [ebp+0x8]
00000003  FFD2              call edx

在这种情况下,函数的地址将在EDX寄存器中。