逆向工程开篇(连载中)

项目特点

这个专栏专门设计用于汇编逆向工程研究,包含:

  • ✅ 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
  • 内存访问:各种寻址模式(直接、间接、基址+偏移、索引等)
相关推荐
我在人间贩卖青春6 天前
汇编之伪指令
汇编·伪指令
我在人间贩卖青春6 天前
汇编之伪操作
汇编·伪操作
济6176 天前
FreeRTOS基础--堆栈概念与汇编指令实战解析
汇编·嵌入式·freertos
myloveasuka6 天前
汇编TEST指令
汇编
我在人间贩卖青春6 天前
汇编编程驱动LED
汇编·点亮led
我在人间贩卖青春6 天前
汇编和C编程相互调用
汇编·混合编程
myloveasuka7 天前
寻址方式笔记
汇编·笔记·计算机组成原理
请输入蚊子7 天前
《操作系统真象还原》 第六章 完善内核
linux·汇编·操作系统·bochs·操作系统真像还原
myloveasuka7 天前
指令格式举例
汇编·笔记·计算机组成原理
我在人间贩卖青春8 天前
汇编之分支跳转指令
汇编·arm·分支跳转