当前位置: 首页 > news >正文

逆向工程开篇(连载中)

项目特点

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

  • ✅ 18个测试模块,覆盖所有主要C语言特性
  • ✅ 1200+行工具类代码,400+行主程序代码
  • ✅ 完整的Visual Studio 2017项目支持
  • ✅ Debug和Release两种构建配置
  • ✅ 静态库和可执行文件分离
  • ✅ 自动化的.obj和.asm文件提取
  • ✅ 丰富的汇编指令覆盖率
  • ✅ 详细的提取报告和文档
  • 专门的函数参数传递测试模块
  • 多种调用约定和参数传递模式测试

适用于:

  • C语言到汇编的转换研究
  • 汇编逆向工程的准确性验证
  • 编译器优化效果分析
  • 汇编指令覆盖率测试
  • 静态库文件分析
  • 目标文件格式研究
  • 函数调用约定分析
  • 参数传递机制研究

跳转

一、无参数的函数调用- RSP,EAX寄存器,全局变量,INT类型和MOV,INC,SHL指令
二、函数调用包含单个参数之整型-ECX寄存器,LEA指令

项目地址

整体项目地址存放于https://github.com/Jacen9/AssemblyReverse
可以使用命令拉取

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
  • 内存访问:各种寻址模式(直接、间接、基址+偏移、索引等)
http://www.lqws.cn/news/107227.html

相关文章:

  • 使用seaborn/matplotlib定制好看的confusion matrix
  • ssm学习笔记day04
  • Vue3 + Typescript:类型使用记录 / 类型注解 / 积累
  • PV操作的C++代码示例讲解
  • AI与区块链:数据确权与模型共享的未来
  • Day-15【选择与循环】选择结构-if语句
  • 2025年微信小程序开发:AR/VR与电商的最新案例
  • sourcetree中的mercurial有什么用
  • 用PyTorch从零开始编写DeepSeek-V2
  • ONLYOFFICE 与 LocalAI:在 Ubuntu 上搭建 AI 文档编辑环境
  • 二进制安全-OpenWrt-uBus
  • 黑马程序员TypeScript课程笔记2(11-20)
  • MS1023/MS1224——10MHz 到 80MHz、10:1 LVDS 并串转换器(串化器)/串并转换器(解串器)
  • 【笔记】用命令手动下载并安装 tokenizers 库.whl文件(Python 3.12+)
  • Modbus转Ethernet IP网关助力罗克韦尔PLC数据交互
  • ESP32开发之LED闪烁和呼吸的实现
  • Tiktok App 登录账号、密码、验证码 XOR 加密算法
  • 道可云人工智能每日资讯|北京农业人工智能与机器人研究院揭牌
  • 【leetcode】15.三数之和
  • day20 奇异值SVD分解
  • 重新审视自回归语言模型的知识蒸馏
  • el-select 实现分页加载,切换也数滚回到顶部,自定义高度
  • Java求职者面试:Spring、Spring Boot、Spring MVC与MyBatis技术深度解析
  • 【C/C++】初步了解享元模式
  • 20250603在荣品的PRO-RK3566开发板的Android13下的使用命令行来查看RK3566的温度【显示优化版本】
  • 机器学习——使用多个决策树
  • Agent智能体应用教程系列(四):仅需几步,拥有自己专属的多agent智能体!
  • 计算A图片所有颜色占B图片红色区域的百分比
  • 关于物联网的基础知识(二)——物联网体系结构分层
  • 用Python训练自动驾驶神经网络:从零开始驾驭未来之路