我需要反汇编命令8E C0,你能帮帮我吗?
我已经做到了:
第一个字节8E = 10001110b它是mov sr,reg / mem
但我不知道如何处理第二个字节11000000
答案 0 :(得分:9)
您可以通过英特尔文档自行解决,或者您可以使用更容易的反汇编程序。答案是:
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 < / em>部分将指明来源。分开这些位, Mod 是前两位(11b
), Reg 是接下来的三位(000b
)和 R / M 最后三位(000b
)。
在适当的表格中查找11
的 Mod 表示注册操作数, R / M 表示EAX
(或{{ 1}}在16位模式下)和AX
用于 Reg 在引用段寄存器时为000
。