【问题标题】:Intel 80x86 PE Code Translation英特尔 80x86 PE 代码翻译
【发布时间】:2014-07-16 08:28:47
【问题描述】:

我目前正在尝试理解以下 PE Code 指令的翻译:

004033C0 | .-E9 3BDCFFFF | JMP seh_exam.00401000

我自己做了一些研究,由于它是无条件跳转,我认为它是下表中的指令:

(图片来源:http://www.mathemainzel.info/files/x86asmref.html#jmp

据我了解,字节 E9 = 无条件跳转,3B = o0 和 DC = 01,其中 o0 和 01 表示设置 EIP 的偏移量。

代码向上跳了 9152 个字节,但负偏移量的转换究竟是如何工作的?任何建议将不胜感激。

PS:不是作业题。

【问题讨论】:

  • 请不要发布纯文本截图。你比那更好,我们知道,因为你愿意解决一个困难的编程领域。
  • @KerrekSB 抱歉,删除了第一个屏幕截图。

标签: x86 portable-executable


【解决方案1】:

您问题中的说明是JMP rel32,它不包含在您显示的表格中。您可能应该使用更好的参考,例如 Intel's Software Developer Manuals

little-endian 布局(这是 x86 处理器使用的)中的字节 3B DC FF FF 形成 32 位双字 FFFFDC3B。在two's complement representation 中,值FFFFDC3B 等于-23C5

您的跳转指令从4033C0 开始,长度为 5 个字节。由于跳转位移是相对于下一条指令的开头的,所以你得到了跳转目标4033C0 + 5 - 23C5 == 401000。或者,您可以将其写为truncate_to_32_bits(4033C0 + 5 + FFFFDC3B)

【讨论】:

  • 感谢您的清理。回答了可能出现的任何其他问题。
猜你喜欢
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2018-08-03
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多