bet*_*eta 0 x86 portable-executable
我目前正在尝试理解以下PE代码指令的翻译:
004033C0 | .-E9 3BDCFFFF | JMP seh_exam.00401000
Run Code Online (Sandbox Code Playgroud)
我自己做了一些研究,因为它是一个无条件的跳转,我认为它是下表中的指令:

(图片来源:http://www.mathemainzel.info/files/x86asmref.html#jmp)
根据我的理解,字节E9 =无条件跳转,3B = o0和DC = 01,其中o0和01表示设置EIP的偏移量.
代码跳跃了9152个字节,但负偏移的转换究竟是如何工作的?任何意见,将不胜感激.
PS:不是作业问题.
您问题中的说明是a JMP rel32,未显示在您所显示的表格中.您可能应该使用更好的参考,例如英特尔的软件开发人员手册.
字节3B DC FF FF在一个小端布局(其为x86处理器使用什么)形成32位的双字FFFFDC3B.在二进制补码表示中,值FFFFDC3B等于-23C5.
您的跳转指令从4033C05 开始,并且长度为5个字节.由于跳跃位移是相对于下一条指令的开始,因此您将获得跳转目标4033C0 + 5 - 23C5 == 401000.或者你可以把它写成truncate_to_32_bits(4033C0 + 5 + FFFFDC3B).
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |