以下操作码的指令是什么?
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)
答案 0 :(得分:2)
3E
是句段替代前缀,这意味着它应该在开始处作为前缀。因为它遵循操作码,所以它是一个modr / m字节,因此意味着[esi]
和操作码扩展名/7
,即imm32
。这是一条cmp [esi], imm32
指令。
有关更多信息,请参见图2-1。 《英特尔®64和IA-32架构软件开发人员手册第二卷:指令集参考》中的英特尔64和IA-32架构指令格式以及整个第二章指令格式。 AZ 。
PS:您应该指定使用的是16位,32位还是64位模式。