反汇编引擎工作原理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

反汇编引擎⼯作原理
在x86平台上使⽤的汇编指令对应的⼆进制机器码为Intel指令集-Opcode。

Inter指令⼿册中描述的指令由六部分组成,如图所⽰。

结构图说明如下:
Instruction Prefixes:指令前缀
指令前缀是可选的,作为指令的补助说明信息存在,主要⽤于以下4种情况。

重复指令:如REP、REPE、REPZ
跨段指令:如MOV DWORD PTR FS:[XXXX],0
将操作数从32位转为16位:如MOV AX,WORD PTR DS:[EAX]
将地址从16位转为32位:如MOV EAX,DWORD PTR DS:[BX+SI]
Opcode:指令操作码
Opcode为机器码中的操作符部分,⽤来说明指令语句执⾏什么样的操作,如某条汇编语句是MOV、JMP还是CALL,Opcode为汇编指令语句的主要组成部分,是必不可少的。

汇编指令助记符与Opcode是⼀⼀对应关系。

每⼀条汇编指令助记符都会对应⼀条Opcode码,但是由于操作数类型不同,所占长度不同,因此对于⾮单字节指令来说,解析⼀条汇编指令单凭Opcode是不够的,还需要Mode R/M、SIB、Displacement的帮助。

Mode R/M:操作数类型
Mode R/M是辅助Opcode解释汇编指令助记符后的操作数类型。

R表⽰寄存器,M表⽰内存单元。

Mode R/M占⼀个字节的固定长度。

第6、7位可以描述4状态,分别⽤来描述第0、1、2位是寄存器还是内存单元,以及3中寻址⽅式。

第3、4、5位⽤来辅助Opcode。

SIB:辅助Mode R/M,计算地址偏移
SIB的寻址⽅式为基地址+变址,如MOV EAX,DWORD PTR DS:[EBX+ECX*2],其中的ECX,乘数2都是由SIB指定的。

SIB占⼀个字节⼤⼩,第0,1,2位⽤来指定作为基地址的寄存器;第3,4,5位⽤来指定作为变址的寄存器;第6,7位⽤于指定乘数。

Displacement:辅助Mode R/M,计算地址偏移
Displacement⽤于辅助SIB,如MOV EAX,DWORD PTR DS:[EBX+ECX*2+3]这条指令中,+3就是由Displacement指定的。

Immediate:⽴即数
⽤于解释指令语句中操作数作为⼀个常量值的情况。

相关文档
最新文档