1

我有一个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我可以在所有输出中看到这样的访问。如何解释它?

4

1 回答 1

3

这是对堆栈地址的引用,但是您的 asm 具有误导性(这就是我不喜欢 AT&T 语法的原因),如果您转换leal 0xe0(%ebp),%eax为字节序列,您将得到8D45 E0,这与LEA EAX,DWORD PTR SS:[EBP-20].

它要么创建指向本地堆栈缓冲区的指针(SUB ESP

于 2012-03-02T07:02:29.433 回答