【问题标题】:MOVZX x86 encodingMOVZX x86 编码
【发布时间】:2015-04-06 22:57:11
【问题描述】:

查看一些反汇编,我看到以下行:

0f b7 8c 00 c4 99 86     movzx ecx,WORD PTR [eax+eax*1-0x3e79663c]

反汇编程序如何从该编码中获取值“0x3e79663c”?它似乎与指令的地址无关。

查看原始字节,如果我们从 0 中减去 0x8699c4,我们得到 0xff79663c。该数字的最后 3 个字节是反汇编程序所拥有的,但我仍然看不到最重要的字节(0x3e)来自哪里。


更新

结果是 objdump 以一种奇怪的方式打印出来。由于某种原因,它将丢失的字节打印为下一个操作码。

  35:   83 c7 01                add    edi,0x1
  38:   0f b7 8c 00 c4 99 86    movzx  ecx,WORD PTR [eax+eax*1-0x3e79663c]
  3f:   c1 
  40:   8d 81 30 96 86 c1       lea    eax,[ecx-0x3e7969d0]

感谢 Jester 解决这个问题。

【问题讨论】:

  • 这不是下一个操作码,它只是一个续行。如果需要,您可以使用--insn-width=15 设置更宽的显示。

标签: assembly x86 disassembly


【解决方案1】:

您在指令末尾缺少一个字节。 应该是0f b7 8c 00 c4 99 86 c1,偏移量是0xc18699c4,也就是-0x3e79663c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多