【问题标题】:What does mov [ebx+0x18] ecx do?mov [ebx+0x18] ecx 是做什么的?
【发布时间】:2016-12-28 13:19:13
【问题描述】:

这条指令有什么作用? 我不明白 [ebx+0x18] 它在做什么?因为 ebx 不是地址而是寄存器所以请帮帮我^^

【问题讨论】:

  • EBX 可以包含地址...
  • 是否增加了 ebx 中的地址?
  • 它正在访问ebx持有的内存地址,偏移量为24
  • 是以字节为单位的偏移量?
  • @assemblerMan 没有位寻址,地址以字节为单位,偏移量也是如此。

标签: assembly x86


【解决方案1】:

我假设指令是mov [ebx+0x18], ecx?

这是 Intel 语法,其中方括号表示里面的值被取消引用,就好像它是一个指针一样。在这种情况下,常量偏移量0x18 被添加到存储在ebx 寄存器中的值,然后这被解释为一个内存地址,然后被取消引用。

因此,该指令将存储在ecx 中的值复制到ebx+0x18 指向的内存中。

请注意,ebxecx 寄存器的实际内容没有被修改——只有地址为 ebx+0x18 的内存。

【讨论】:

    【解决方案2】:

    mov 指令是这样的:

    mov <destination>, <source>
    

    所以要将寄存器 EBX 设置为与 ECX 相同的值,您需要:

    mov ebx, ecx
    

    操作数周围的括号表示使用解引用,即查看特定寄存器中的地址,并将其用作源或目标。将 EBX 在内存中指向的位置设置为 ECX 的值:

    mov [ebx], ecx
    

    最后,您可以在解除引用时做一些基本的算术运算。因此,将位置0x18(或24)字节从EBX指向的位置向前设置为ECX的值:

    mov [ebx + 0x18], ecx
    

    【讨论】:

    • 0x18 偏移量是字节还是位?
    • @assemblerMan 两者都不是。 0x18 只是一个偏移量,所以它只是一个数字,当添加到地址时会产生一个地址。正如X + O 解释的那样,产生由 XO 之和给出的地址(例如 0x100 + 0x18 = 0x118)。现在地址在 x86 架构中代表什么?一点,一个字节,一个字?
    • @assemblerMan 正如玛格丽特解释的那样,这确实只是添加数字。在这种情况下,我认为可以安全地说地址指的是 byte 位置,因此字节偏移量是 EBX 指向的位置前 24 个 bytes
    • 另一个问题,libc-2.11.2.so 或 libc.so.6 的区别是什么,它们中的哪一个在内存映射段中链接?
    • @assemblerMan 这是一个非常不相关的问题......很抱歉我无法帮助你,因为我不知道:)
    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 2019-06-26
    • 2016-02-09
    • 2016-08-08
    • 2011-02-02
    • 2020-03-10
    • 2012-09-07
    • 2015-06-07
    相关资源
    最近更新 更多