相对于EBP的非常积极的抵消

时间:2012-03-02 06:31:46

标签: assembly otool

我有一个i386二进制文件,没有机会执行它。 otool -tv说:

一些功能或方法:

0001a1e0    pushl   %ebp            ; just prolog
0001a1e1    movl    %esp,%ebp       ; save old ESP
0001a1e3    pushl   %edi            ; save EDI, ESI, EBX
0001a1e4    pushl   %esi            ;
0001a1e5    pushl   %ebx            ;
0001a1e6    subl    $0x4c,%esp      ; allocate 0x4c bytes for local puproses
...                                 ; etc

下面的指示

0001a20e    leal    0xe0(%ebp),%eax ; load an address into EAX

让我很失望! 0xe0(%ebp)指向哪里?我认为这不是局部变量,因为正偏移。我可以在所有otool输出中看到这种访问。如何翻译?

1 个答案:

答案 0 :(得分:3)

这是对堆栈地址的引用,但是你的asm有误导性(这就是为什么我不喜欢AT& T语法),如果你将leal 0xe0(%ebp),%eax转换为字节序列,你将获得{{ 1}},与8D45 E0相同。

它要么创建指向本地堆栈缓冲区的指针(由LEA EAX,DWORD PTR SS:[EBP-20]创建),要么创建指向第7个函数参数的指针,但是没有看到完整的代码,我的赌注就是前者。