【问题标题】:how to I get Instruction hex code in x86? [duplicate]如何在 x86 中获取指令十六进制代码? [复制]
【发布时间】:2020-05-27 08:38:11
【问题描述】:
section .data

section .text

global _start


_start:
    mov eax, loop ; eax <- addr of loop
    mov ebx, new
    mov ecx, new   
    mov esi, 2
loop:
    mov edx, [eax] ; edx <- instruction of loop, but not worked
    mov [ebx], edx 
    add eax, esi
    add ebx, esi
    cmp eax, ecx
    jne loop
    mov ecx, ebx
new:

x86 code picture

我在这段代码中想要的是将循环的指令十六进制代码放入 edx。

如果你看到这里,mov edx和[eax]存储在循环中,我认为指令代码是0x1389108b,但实际保存的值是0x13cc10cc .我不知道如何获得这个值0x1389108b

【问题讨论】:

    标签: assembly x86 gdb machine-code self-modifying


    【解决方案1】:

    loop 处的指令是 8b 10,下一条指令是 89 13。但是,您已在每条指令处设置断点,因此调试器已用断点指令覆盖每条指令的第一个字节。断点的代码是 cc,所以这就是你的程序读取的内容。如果你在不设置断点的情况下运行它,你会得到你期望的值。

    【讨论】:

    • GDB 有一个hbreak 来使用硬件辅助断点(调试寄存器而不是0xcc),这也可以避免这种情况。我认为另一个关于负载看到0xcc 的问题存在重复...是的,找到了 Jester 在答案中提到hbreak 的问题。结果发现有几个 Visual Studio 调试器重复。
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2016-06-06
    • 2011-10-25
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多