C++ 反汇编
配套资源下载
环境及工具
反汇编引擎工作原理(可略过)
基本数据类型的表现形式
程序的真正入口
本文档使用 MrDoc 发布
-
+
首页
反汇编引擎工作原理(可略过)
- 在 x86 平台下使用的汇编指令对应的二进制机器码为 Intel 指令集 Opcode。Intel 指令手册中描述的指令由 6 部分组成: ![](/media/202404/2024-04-01_143533_0707960.172509160416362.png) - 依次介绍如下: - **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]。 - 一些说明:WORD:2 字节;DWORD:4 字节;PTR:临时指定类型的,可以理解为强制类型转换;DS:段寄存器。 - 段寄存器。这里做一些举例: - 错误1: `mov ax,1122h` `mov 1000h:[0h],ax` 错误原因:内存地址不能直接使用数值(1000h:[0h])表示,需要由段地址寄存器来提供。 - 错误2:`mov ds,1000h` 错误原因:不能直接将数据写入段寄存器的 - 正确示范:`mov ds:[0],ax` - 正确示范: `mov ax,1122h` `mov bx, 1000h ` 现将内存段地址写书数据寄存器中 `mov ds,bx ` 将数据寄存器中的内存段地址写入 数据段寄存器中 `mov ds:[0],ax ` 将数据段寄存器中的数据 写入内存地址(ds:[0]) 中 - **Opcode:指令操作码** - Opcode 是机器码中的操作符部分,用来说明指令语句执行什么操作,比如说明某条汇编语句是 MOV、JMP 还是 CALL。**汇编指令助记符与 Opcode 是一一对应的关系。** - **Mode R/M:操作数类型** - 一定要参考[X86指令编码内幕 --- ModRM 寻址模式](https://blog.csdn.net/xfcyhuang/article/details/6232303)。 - Mode R/M 的作用是辅助 Opcode 解释汇编指令助记符后面的操作数类型。R 表示寄存器,M 表示内存单元。Mode R/M **占一字节的固定长度**。 - 第 6、7 位可以描述 4 种状态,分别用来描述第 0、1、2 位是寄存器还是内存单元,以及 3 种寻址方式。第 3、4、5 位用于辅助 Opcode。 ![](/media/202404/2024-04-01_145422_8664890.9429949114593866.png) - **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。**(只能是这些值) ![](/media/202404/2024-04-01_145916_5425490.4067465542223937.png) - **Displacement:辅助Mode R/M,计算地址偏移** - Displacement 用于辅助 SIB,如 MOV EAX,DWORD PTR DS:[EBX+ECX*2+3] 这条指令,其中“+3”是由 Displacement 指定的。 - **Immediate:立即数** - 用于解释指令语句中操作数为一个常量值的情况。 - 后面对反汇编引擎的代码阅读解析就略过了。 - 下面是一个推荐的专栏阅读 [x86指令集](https://blog.csdn.net/xfcyhuang/category_792952.html) - 打不开就下载下面的看 [【附件】X86指令编码内幕推荐阅读.rar](/media/attachment/2024/04/X86%E6%8C%87%E4%BB%A4%E7%BC%96%E7%A0%81%E5%86%85%E5%B9%95%E6%8E%A8%E8%8D%90%E9%98%85%E8%AF%BB.rar)
别卷了
2024年4月1日 16:52
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码