【发布时间】:2011-04-28 09:04:16
【问题描述】:
x86 反汇编器如何知道在哪里分解指令?
我正在查看8088 指令集。例如,移动指令有 7 个变体,范围从 2 到 4 个字节。说明本身似乎没有特定的顺序。 Why is x86 ugly? 的另一个原因。
例如:
76543210 76543210 76543210 76543210
reg/mem to/from reg 100010dw ||regr/m
imm to reg/mem 1100011w ||000r/m dat dat w=1
imm to reg 1011wreg data dat w=1
imm to accum 1010000w addr-low addrhigh
accum to mem 1010001w addr-low addrhigh
reg/mem to seg 10001100 ||0ssr/m
seg to reg/mem 10001100 ||0ssr/m
Legend:
||=mod {NO-DISP=0,DISP-LOW,DISP-HIGH,REG}
ss=seg enum{es=0,cs,ss,ds}
reg=enum{ax=0,bx,cd,dx,bx,sp,bp,si,di (if w=1)} enum{al,bl...} (if w=0)
r/m=reg or mem (mod=3 then REG, else mem)
许多指令可以在第一个字节重叠:
76543210 76543210 76543210 76543210
push 11111111 ||110r/m
inc 1111111w ||000r/m
位掩码似乎具有任意分配。反汇编程序如何分解指令?
这个问题是How to write a disassembler.的子集
【问题讨论】:
标签: assembly x86 disassembly