Bre*_*eli 0 x86 assembly opcode disassembly instruction-encoding
我最近刚刚触及汇编语言和调试的表面。我有以下代码:
Address Hex dump Command Comments
006E3689 . E8 C5F9FFFF CALL 006E3053
->006E368E E9 DB E9
->006E368F 35 DB 35 ; CHAR '5'
->006E3690 80 DB 80
->006E3691 . 0000D490 DD 90D40000
006E3695 /> E8 72040000 CALL 006E3B0C
Run Code Online (Sandbox Code Playgroud)
再往下...
Address Hex dump Command Comments
006EB6C8 /. 6A 58 PUSH 58
006EB6CA |. 68 A0372A00 PUSH 2A37A0
006EB6CF ^ E9 C17FFFFF JMP 006E3695
Run Code Online (Sandbox Code Playgroud)
现在,在我编译 -> 指示的代码之前,实际上都包含在 a 中,JMP 006EB6C8当然只是跳到第二组代码,推送了一些内容并返回到顶部。
现在这段代码仍然有效,但我不确定为什么代码在编译时发生了变化(使用 Ollydbg),但更重要的是(我相信)代码如何知道跳转以及跳多远。到目前为止,我的研究告诉我E9是跳转的操作码,但我还没有找到有关 和35的信息80。
我假设这0000D490是某种偏移量,但我找不到任何将地址相加的数学006EB6C8。
我很困惑为什么 OllyDbg 不为你拆解那个跳转。反正,E9正如你已经弄清楚的那样,附近有一个 jmp 。它距离下一条指令的起始位置有 4 个字节的偏移量。因此,您的指令实际上E9 35 80 00 00意味着jump to address of next instruction + 00008035(x86 使用小端字节顺序)。下一条指令的地址当然是006E3693,因此跳转会将您带到006E3693 + 00008035 = 006EB6C8您最初编写的内容。
| 归档时间: |
|
| 查看次数: |
2859 次 |
| 最近记录: |