ModR/M只有一个字节
经典变长指令 _ModR/M
0X88 MOV Eb, Gb G:通用寄存器
0X89 MOV Ev, Gv E: 寄存器/内存
0X8A MOV Gb, Eb b: 字节
0X8B MOV Gv, Ev v: Word, doubleword, quadword
举个例子:
88 01
88查主表就是 MOV Eb, Gb (主表在2541页 Table A - 2)
01 拆分为 00 000 001
Reg/Opcode描述G (ModR/M的表在510页)
000是AL, 所以Gb是AL
Mod R/M5个位共同描述E
Mod的值是00
R/M是001
经过查表,Eb是 【ECX】(510页)
所以最终解析为 mov byte ptr ds:[ecx],al
注意:
3-5字段,并不仅仅用来标识寄存器,有些时候,用来标识扩展的Opcode
80 65 08 FF
80 查表是 XXX Eb, ib
65 --->01 100 101
查TABLE A-6(2552页) 得 XXX是AND
然后查表(510页)得 Eb是 [EBP] + disp32
AND byte ptr ds:[EBP + disp32] , ib
指令加上后面的 08 FF得
AND byte ptr ds:[EBP + 08], FF