【问题标题】:difference between movl and leal instruction [duplicate]movl和leal指令之间的区别[重复]
【发布时间】:2015-10-12 17:00:17
【问题描述】:

假设堆栈如下,其中字符串 /bin/sh 的地址为 0x11:

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

【问题讨论】:

标签: assembly x86


【解决方案1】:

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

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

如果要复制内存一般需要经过一个寄存器,比如:

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

【讨论】:

    猜你喜欢
    • 2012-11-11
    • 2014-11-27
    • 2011-12-02
    • 2010-10-19
    • 2013-05-17
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多