带有ESP +偏移的x86 LEA

时间:2014-03-18 05:53:53

标签: assembly x86 reverse-engineering disassembly

我正在通过实用恶意软件分析一书学习x86,我经常看到类似的内容:

lea   edx, [esp+24Ch+name]
push  edx
push  ...
call ds:bind

我理解LEA是如何工作的,这基本上是在edx中存储esp + 24C + name的值。这可能是指向字符串前面的指针。

我不明白的是编译器如何提出这个问题。这个存储在哪里?这是堆栈中的某个地方吗?如果不是为什么使用esp?

我认为我的程序员在编译器中感觉像是“神奇的数字”时遇到了困难。

1 个答案:

答案 0 :(得分:1)

编译器不必使用ebp作为基址寄存器。它可以决定单独计算堆栈,然后直接使用堆栈指针。在GCC中,您可以使用-fomit-frame-pointer来实现此优化。 然后,编译器可以生成保持固定大小堆栈或保持计数的代码。取决于功能。