相对于EBP的一个非常正的偏移



我有一个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输出中看到这样的访问。如何翻译?

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

它要么创建指向本地堆栈缓冲区的指针(由SUB ESP创建),要么创建指向第7个函数参数的指针,但在没有看到完整代码的情况下,我的赌注是前者。

相关内容

最新更新