假设堆栈如下,其中字符串/bin/sh的地址为0x11:
在movl %esi, 0x8(%esi)
之后,我认为从内存地址%esi
加载的值将移动到0x8(%esi)
(这就是movl
的定义)。因此,字符串/bin/sh
将放在地址0x8(%esi)
处。但结果是11
被放在这个地址上。在我看来,如果我们想把11
放在那个地址上,我们应该使用leal
指令,因为leal
不会取消引用(只是一个地址而不是值)。
发布于 2015-10-13 01:06:02
movl %esi, 0x8(%esi)
是寄存器到内存的移动。第一个操作数是一个寄存器,它不引用内存。
另一方面,leal %esi, 0x8(%esi)
甚至不存在,因为您不能获取寄存器的地址,而且lea
也不能写入内存。
如果你想复制内存,你通常需要通过一个寄存器,例如:
movl (%esi), %eax
movl %eax, 0x8(%esi)
https://stackoverflow.com/questions/33086486
复制相似问题