我需要反汇编命令8E C0,你能帮我吗?
我已经做了这个:
第一个字节 8E = 10001110b 它是 mov sr,reg/mem
但我不知道如何处理第二个字节 11000000
您可以通过 intel 文档自行解决,或者您可以使用更容易的反汇编程序。答案是:
mov ES, EAX
我使用 yasm,并做了以下事情:
# assemble the two bytes:
echo 'lbl: db 0x8e, 0xc0' | yasm -f elf - -o tmp.o
# disassemble the output:
objdump -d -M intel tmp.o
如果您想手动执行此操作,可以将字节解释如下。
8E
对应于 Intel 指令集参考中的这条指令:
8E /r ... MOV Sreg,r/m16 ... 将r/m16移动到段寄存器
/r
表示后面的字节是“Mod R/M”字节。指令的描述表明我们应该将Reg/Opcode部分解释为将作为目标的段寄存器,而Mod和R/M部分将指示源。将位分开,Mod是前两位 ( 11b
),Reg是接下来的三位 ( 000b
),R/M是后三位 ( 000b
)。
在相应的表中查找,Mod of11
表示寄存器操作数,其中R/M表示EAX
(或AX
在 16 位模式下),000
对于Reg引用段寄存器时是ES
。