假设堆栈如下,其中字符串/ bin / sh的地址是0x11:
在movl %esi, 0x8(%esi)
之后我认为从内存地址%esi
加载的值将移至0x8(%esi)
(这是movl
的定义)。因此字符串/bin/sh
将放在地址0x8(%esi)
。但结果是11
放在该地址。在我看来,如果我们想将11
放在该地址,我们应该使用leal
指令,因为leal
不会取消引用(只是地址而非值)。
答案 0 :(得分:1)
movl %esi, 0x8(%esi)
是记忆移动的寄存器。第一个操作数是寄存器,它不引用内存。
另一方面,leal %esi, 0x8(%esi)
甚至不存在,因为您无法获取寄存器的地址,lea
也无法写入内存。
如果要复制存储器,通常需要通过寄存器,例如:
movl (%esi), %eax
movl %eax, 0x8(%esi)