反汇编 - 相关工具和intel指令集结构介绍

目录

1.反汇编

2.反汇编相关工具介绍

3.Interl指令集结构

3.1 Instruction Prefixes:指令前缀

3.2 Opcode:指令操作码

3.3 Mode R/M:操作数类型

3.4 SIB:辅助Mode R/M,计算地址偏移

3.5 Displacement:辅助Mode R/M,计算地址偏移

3.6 Immediate:立即数


1.反汇编

        通过查表将机器指令解释为对应的汇编指令。
ProView是一款常见的反汇编引擎


2.反汇编相关工具介绍

OllyDBG:是一款专为Windows平台设计调试工具,反汇编辅助分析功能有限,不适用于静态分析

IDA Pro:辅助功能极为强大的反汇编静态分析工具

Ghidra:是由美国国家安全局(NSA)开发的开源反汇编和逆向工程工具。它可以处理多种类型的二进制文件,并同样提供了丰富的代码分析工具和插件支持

WinHex:是一款以通用的16进制编辑器为核心,专门用来对付计算机取证,数据恢复,低级数据处理,以及 IT 安全性、各种日常紧急情况的高级工具

WinDbg:一款Windows内核调试工具:

HOPPER:是一款Linux的反向工程工具,可让您反汇编和反编译32/64位IntelMac,Linux,Windows和iOS可执行文件。


3.Interl指令集结构

       X86平台下汇编指令对应的二进制机器码为Intel指令集 - Opcode,Intel指令手册中描述的指令组成包含如下6部分。

3.1 Instruction Prefixes:指令前缀

指令前缀是可选的,作为指令的补助说明信息存在,主要用于以下4种情况。
(1)重复指令:如REP、REPE\REPZ

(2)跨段指令:如MOV DWORD PTR FS:[XXXX],0

(3)将操作数从32位转为16位:如MOV AX, WORD PTR DS:[EAX]

(4)将地址从16位转为32位:如MOV EAX, DWORD PTR DS:[BX+SI]


3.2 Opcode:指令操作码

        Opcode为机器码中的操作符部分,用来说明指令语句执行什么样的操作,如某条汇编语句是MOV、JMP还是CALL。Opcode为汇编指令语句的主要组成部分,是必不可少的。对Opcode的解析也是反汇编引擎的主要工作。汇编指令助记符与Opcode是一一对应的关系。每一条汇编指令助记符都会对应一条Opcode码,但由于操作数类型不同,所占长度也不相同,
因此对于非单字节指令来说,解析一条汇编指令单凭Opcode是不够的,还需要Mode R/M、SIB、Displacement的帮助,才能够完整地解析出汇编信息。

3.3 Mode R/M:操作数类型

        Mode R/M是辅助Opcode解释汇编指令助记符后的操作数类型。R表示寄存器,M表示内存单元。Mode R/M占一个字节的固定长度,如下图所示。第6、7位可以描述4种状态,分别用来描述第0、1、2位是寄存器还是内存单元,以及3种寻址方式。第3、4、5位用于辅助Opcode。

反汇编 - 相关工具和intel指令集结构介绍_第1张图片

3.4 SIB:辅助Mode R/M,计算地址偏移

        SIB的寻址方式为基址+变址,如MOV EAX, DWORD PTR DS:[EBX+ECX*2],其中的ECX、乘数2都是由SIB来指定的。SIB的结构如下图所示。SIB占1个字节大小,第0、1、2位用于指定作为基址的寄存器;第3、4、5位用于指定作为变址的寄存器;第6、7位用于指定乘数,由于只有两位,因此可以表示4种状态,这4种状态分别表示乘数为1、2、4、8。

反汇编 - 相关工具和intel指令集结构介绍_第2张图片

3.5 Displacement:辅助Mode R/M,计算地址偏移

        Displacement用于辅助SIB,如MOV EAX, DWORD PTR DS:[EBX+ECX*2+3]这条指令,其中的“+3”是由Displacement来指定的。

3.6 Immediate:立即数

        用于解释指令语句中操作数为一个常量值的情况


 

你可能感兴趣的:(反汇编,反汇编)