movl和leal指令之间的区别

时间:2015-10-12 17:00:17

标签: assembly x86

假设堆栈如下,其中字符串/ bin / sh的地址是0x11: enter image description here

movl %esi, 0x8(%esi)之后我认为从内存地址%esi加载的值将移至0x8(%esi)(这是movl的定义)。因此字符串/bin/sh将放在地址0x8(%esi)。但结果是11放在该地址。在我看来,如果我们想将11放在该地址,我们应该使用leal指令,因为leal不会取消引用(只是地址而非值)。

1 个答案:

答案 0 :(得分:1)

movl %esi, 0x8(%esi)是记忆移动的寄存器。第一个操作数是寄存器,它不引用内存。

另一方面,leal %esi, 0x8(%esi)甚至不存在,因为您无法获取寄存器的地址,lea也无法写入内存。

如果要复制存储器,通常需要通过寄存器,例如:

movl (%esi), %eax
movl %eax, 0x8(%esi)