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

逆向工程开篇(连载中)

项目特点

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

  • ✅ 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
可以使用命令拉取

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.lryc.cn/news/2402171.html

相关文章:

  • this.$set() 的用法详解(Vue响应式系统相关)
  • PARADISE:用于新生儿缺氧缺血性脑病(HIE)疾病识别与分割的个性化和区域适应性方法|文献速递-深度学习医疗AI最新文献
  • RabbitMQ 监控与调优实战指南(二)
  • WordPress子主题RiPro-V5van无授权全开源版(源码下载)
  • 保姆级Elasticsearch集群部署指导
  • PyQt实现3维数组与界面TableWidget双向绑定
  • StoreView SQL,让数据分析不受地域限制
  • 护网面试题目2025
  • Figma 与 Cursor 深度集成的完整解决方案
  • UCRT 和 MSVC 的区别(Windows 平台上 C/C++ 开发相关)
  • rabbitmq Fanout交换机简介
  • 【机器学习】集成学习与梯度提升决策树
  • Palo Alto Networks Expedition存在命令注入漏洞(CVE-2025-0107)
  • WebFuture:Ubuntu 系统上在线安装.NET Core 8 的步骤
  • JAVA-springboot JUnit单元测试
  • hot100 -- 6.矩阵系列
  • PyCharm中运行.py脚本程序
  • 吴恩达MCP课程(5):research_server_prompt_resource.py
  • [论文阅读] 人工智能+项目管理 | 当 PMBOK 遇见 AI:传统项目管理框架的破局之路
  • Gateway 搭建
  • pytorch基本运算-导数和f-string
  • impala中更改公网ip为内网ip
  • 5.RV1126-OPENCV 图形计算面积
  • 一键净化Excel数据:高性能Python脚本实现多核并行清理
  • 【Android基础回顾】一:Binder机制是什么?有什么用?
  • LeetCode 高频 SQL 50 题(基础版) 之 【高级查询和连接】· 上
  • 资产智慧管理安全监测中心
  • 从零开始的云计算——番外实战,iptables防火墙项目
  • 移动网页调试的多元路径:WebDebugX 与其他调试工具的组合使用策略
  • 【基于阿里云搭建数据仓库(离线)】IDEA导出Jar包(包括第三方依赖)