【问题标题】:x86 mov opcode disassemblingx86 mov 操作码反汇编
【发布时间】:2011-12-15 10:53:56
【问题描述】:

我已经内置了 IDE x86 调试器,它可以反汇编:

第一种情况:

65 48 8B 05 30 00 00 00
mov rax,gs:[rel $00000030]

第二种情况:

65 48 8B 04 25 30 00 00 00
mov rax,gs:[+$0030]

有什么区别?

我怀疑反汇编有问题但无法翻译高位操作码。

我知道的是:

  • 65gs 前缀
  • 48REX.W 前缀
  • 8Bmov ...
  • ...???

【问题讨论】:

    标签: debugging assembly x86 x86-64 disassembly


    【解决方案1】:

    第一个是RIP相对地址,第二个是绝对地址。

    有关操作码的翻译,请参阅 http://www.sandpile.org 。 正如 Polynomial 所指出的,http://ref.x86asm.net 更好,但目前不支持 AVX 或 XOP。

    • 8B - 操作码 - 以mov Gv, Ev 给出,其中 Gv 表示寄存器目标,其中 Ev 是 r/m 目标。
    • 05 - mod r/m - 表示rax 为目标,rip 相对地址为有效地址
    • 30 00 00 00rip 的偏移量

    第二个:

    • 8B - 操作码 - 以mov Gv, Ev 给出,其中 Gv 表示寄存器目标,其中 Ev 是 r/m 目标。
    • 04 - mod r/m - 指示rax 为目标,sib 为有效地址
    • 25 - sib - 地址格式为 [basereg + indexreg*stride + offset],在这种情况下,base 和 index 都是 0。
    • 30 00 00 00 偏移量。

    【讨论】:

    • 谢谢 - 这是我要找的网站!我发誓它在我书签的某个地方,但我一定是不小心删除了它。
    • 所以,如果我理解第一种情况下的地址是相对的(rip + 0x30),而第二种情况下的地址是绝对的。
    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多