2014-07-17 33 views
1

我是逆向工程的新手,当我遇到LEA指令时,我有时会感到困惑。 我想知道如何知道如果lea指令是一个数组或引用指针。 很多人说LEA指令作为参考指令使用Olly或IDA进行拆卸

例如:lea ecx, [eax]在C++ --meaning像 “INT A = & B”;

有的人说,它是用来将寄存器的内容加载到另一个寄存器

如:lea ecx, [eax] --meaning被加载到ECX [EAX]的内容;

但我选择第一个选项。但是,在很迷茫的当升看到奥利是这样的:

lea ecx, dword ptr ss:[ecx+eax*2] 

lea ecx, dword ptr ds:[ecx+eax*2] 

等。

请详细解释这些指令的含义,以便知道它何时代表C++中的引用指针或数组,甚至是如何知道olly或IDA中的两者(数组和指针指针)。 我升级提前。 谢谢。

回答

-2

C/C++访问指针或数组本质上是一样的。一个简单的lea ecx, [eax]将很可能是一个指针取消引用,因为没有偏移量。像lea ecx, dword ptr ss:[ecx+eax*2]之类的更复杂的东西很可能是数组访问,因为有一个基址指针(ecx)加上索引时间大小(+eax*2)。对此它没有硬性规定。

+2

'lea'不执行取消引用,'mov'。 –

+0

@IgorSkochinsky你说得很好。我错了。我不确定'lea ecx,[eax]'是什么意思,而不是使用'mov ecx,eax'。 – rjp

+0

'lea ecx,[eax]'是毫无意义的。但'ecx,dword ptr ss:[ecx + eax * 2]'只是更快的数学运算(不必从存储器位置读取额外的操作数) –