rasm和gdb错误的指令反汇编

时间:2019-07-14 18:13:30

标签: assembly gdb ida opcode radare2

以下操作码的指令是什么?

81 3E 38 43 55 AA 5A 5A

我在sandphile中检查了这些操作码

81 is CMP opcode 
3E is DS segment register override prefix
43 38 is offset
55 AA 5A 5A is operand

根据沙堆,我应该得到这样的结果:

cmp [0x4338], 0x55AA5A5A

和最终解释性指令:

cmp [0x4338], 0x55AA5A5A

但是当我检查rasm和gdb时,却得到了这样的错误结果:

rasm2 -a x86 -b 32 -d "81 3E 38 43 55 AA 5A 5A"
cmp dword [esi], 0xaa554338
pop edx
pop edx

使用gdb

x/i 0x5555567da960
   0x5555567da960:  cmpl   $0xaa554338,(%rsi)

1 个答案:

答案 0 :(得分:2)

3E是句段替代前缀,这意味着它应该在开始处作为前缀。因为它遵循操作码,所以它是一个modr / m字节,因此意味着[esi]和操作码扩展名/7,即imm32。这是一条cmp [esi], imm32指令。

有关更多信息,请参见图2-1。 《英特尔®64和IA-32架构软件开发人员手册第二卷:指令集参考》中的英特尔64和IA-32架构指令格式以及整个第二章指令格式。 AZ 。

PS:您应该指定使用的是16位,32位还是64位模式。