2

我需要反汇编命令8E C0,你能帮我吗?

我已经做了这个:

第一个字节 8E = 10001110b 它是 mov sr,reg/mem

但我不知道如何处理第二个字节 11000000

4

1 回答 1

9

您可以通过 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部分解释为将作为目标的段寄存器,而ModR/M部分将指示源。将位分开,Mod是前两位 ( 11b),Reg是接下来的三位 ( 000b),R/M是后三位 ( 000b)。

在相应的表中查找,Mod of11表示寄存器操作数,其中R/M表示EAX(或AX在 16 位模式下),000对于Reg引用段寄存器时是ES

于 2011-06-06T06:09:08.743 回答