项目特点
这个专栏专门设计用于汇编逆向工程研究,包含:
- ✅ 18个测试模块,覆盖所有主要C语言特性
- ✅ 1200+行工具类代码,400+行主程序代码
- ✅ 完整的Visual Studio 2017项目支持
- ✅ Debug和Release两种构建配置
- ✅ 静态库和可执行文件分离
- ✅ 自动化的.obj和.asm文件提取
- ✅ 丰富的汇编指令覆盖率
- ✅ 详细的提取报告和文档
- ✅ 专门的函数参数传递测试模块
- ✅ 多种调用约定和参数传递模式测试
适用于:
- C语言到汇编的转换研究
- 汇编逆向工程的准确性验证
- 编译器优化效果分析
- 汇编指令覆盖率测试
- 静态库文件分析
- 目标文件格式研究
- 函数调用约定分析
- 参数传递机制研究
跳转
一、无参数的函数调用- RSP,EAX寄存器,全局变量,INT类型和MOV,INC,SHL指令
二、函数调用包含单个参数之整型-ECX寄存器,LEA指令
三、函数调用包含单个参数之float类型-xmm0寄存器,sub,rep,stos,movss,mulss,addss指令
四、函数调用包含单个参数之Double类型-mmword,movsd,mulsd,addsd指令,总结汇编的数据类型
项目地址
整体项目地址存放于https://github.com/Jacen9/AssemblyReverse
可以使用命令拉取
bash
https://github.com/Jacen9/AssemblyReverse.git
功能特性
该项目覆盖了以下C语言特性,确保生成的汇编代码具有最大的指令覆盖率:
1. 基础数据类型和运算
- 整数运算(int, short, long)
- 浮点运算(float, double)
- 字符和字符串操作
- 布尔类型操作
2. 位运算操作
- 按位与、或、异或、非
- 左移、右移操作
- 位域操作
3. 控制流结构
- if/else条件语句
- switch/case语句
- for循环
- while循环
- do-while循环
- goto语句
4. 函数和调用约定
- 普通函数调用
- 递归函数调用
- 函数指针和回调函数
- 变参函数(variadic functions)
- 内联函数
- 函数参数传递测试 :
- 无参数函数
- 单参数函数(不同类型:int, float, double, char, bool, pointer)
- 双参数函数(相同类型和混合类型)
- 三到八参数函数(混合类型组合)
- 大量参数函数(超过寄存器数量,测试栈传递)
- 结构体参数传递(按值和按指针)
- 数组参数传递(不同声明方式)
- 函数指针参数传递
- 复杂混合参数(结构体+函数指针+数组+基础类型)
- 递归函数参数传递
- 参数传递性能基准测试
5. 数据结构
- 结构体(struct)
- 联合体(union)
- 枚举(enum)
- 数组操作
- 指针算术
6. 内存管理
- 动态内存分配(malloc/free)
- 内存复制和设置
- 指针操作和解引用
7. 高级特性
- 链表数据结构
- 文件I/O操作
- 类型转换
- 宏定义和预处理器指令
- 静态和全局变量
- 常量定义
汇编指令覆盖率
通过以上18个测试模块,项目能够生成以下汇编指令类型:
参数传递和调用约定指令
- 寄存器传递:MOV RCX, MOV RDX, MOV R8, MOV R9(Windows x64前4个整数参数)
- 浮点寄存器:MOVSS XMM0, MOVSD XMM1(浮点参数传递)
- 栈传递:PUSH, SUB RSP(大量参数时的栈传递)
- 函数调用:CALL, RET
- 栈帧管理:PUSH RBP, MOV RBP RSP, POP RBP, ADD RSP
算术和逻辑指令
- 整数运算:ADD, SUB, MUL, DIV, MOD, INC, DEC
- 浮点运算:FADD, FSUB, FMUL, FDIV, ADDSS, SUBSS, MULSS, DIVSS
- 位运算:AND, OR, XOR, NOT, SHL, SHR
- 比较指令:CMP, TEST
控制流指令
- 条件跳转:JE, JNE, JL, JLE, JG, JGE, JA, JB, JC, JNC
- 无条件跳转:JMP
- 循环指令:LOOP, LOOPE, LOOPNE
内存操作指令
- 数据移动:MOV, MOVZX, MOVSX
- 地址计算:LEA
- 内存访问:各种寻址模式(直接、间接、基址+偏移、索引等)