当前位置: 首页 > 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
  • 内存访问:各种寻址模式(直接、间接、基址+偏移、索引等)

相关文章:

逆向工程开篇(连载中)

项目特点 这个专栏专门设计用于汇编逆向工程研究,包含: ✅ 18个测试模块,覆盖所有主要C语言特性✅ 1200行工具类代码,400行主程序代码✅ 完整的Visual Studio 2017项目支持✅ Debug和Release两种构建配置✅ 静态库和可执行文件分…...

this.$set() 的用法详解(Vue响应式系统相关)

1. 什么是 this.$set()? this.$set(target, key, value) 是 Vue 2 中提供的一个方法,用于向响应式对象中动态添加属性,确保新加的属性同样是响应式的。 2. 为什么需要它? Vue 2 的响应式系统基于 Object.defineProperty&#…...

PARADISE:用于新生儿缺氧缺血性脑病(HIE)疾病识别与分割的个性化和区域适应性方法|文献速递-深度学习医疗AI最新文献

Title 题目 PARADISE: Personalized and regional adaptation for HIE disease identification and segmentation PARADISE:用于新生儿缺氧缺血性脑病(HIE)疾病识别与分割的个性化和区域适应性方法 1 文献速递介绍 缺氧缺血性脑病&…...

RabbitMQ 监控与调优实战指南(二)

五、调优策略与实战:对症下药提升性能 5.1 配置参数调优 在 RabbitMQ 的性能优化中,合理调整配置参数是关键的一环,这些参数涉及内存、磁盘、网络等多个资源层面,对 RabbitMQ 的整体性能有着深远的影响。 内存相关配置&#xf…...

WordPress子主题RiPro-V5van无授权全开源版(源码下载)

WordPress子主题RiPro-V5van无授权全开源版,直接上使用方法:WordPress后台上传就行 这个主题是1.0版本开源的,有能力的可以二次开发一下加一些自己喜欢的功能。 源码下载:https://download.csdn.net/download/m0_66047725/90952148 更多资…...

保姆级Elasticsearch集群部署指导

一、环境准备 1. 硬件要求(单节点建议) CPU:至少2核(生产环境4核)内存:至少4GB(生产环境建议16GB,且为偶数,如8GB、16GB)磁盘:至少50GB SSD&…...

PyQt实现3维数组与界面TableWidget双向绑定

以下是一个使用PyQt实现3维数组与界面TableWidget双向绑定的示例代码。该程序包含一个下拉菜单选择第0维索引,表格展示第1维和第2维的数据,并支持双向数据同步: import sys import numpy as np from PyQt5.QtWidgets import (QApplication, …...

StoreView SQL,让数据分析不受地域限制

作者:章建(处知) 引言 日志服务 SLS 是云原生观测和分析平台,为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务。SLS 提供了多地域支持【1】,方便用户可以根据数据源就近接入 SLS 服务&#xff0c…...

护网面试题目2025

护网基础试题 一、描述外网打点的流程? 靶标确认、信息收集、漏洞探测、漏洞利用、权限获取。最终的目的是获取靶标的系统权限/关键数据。在这个过程中,信息收集最为重要。掌握靶标情报越多,后续就会有更多的攻击方式去打点。比如&#xff…...

Figma 与 Cursor 深度集成的完整解决方案

以下是 Figma 与 Cursor 深度集成的完整解决方案,实现设计-开发无缝协作: 一、集成架构设计 #mermaid-svg-NdvcKTZAZfX9DiUO {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NdvcKTZAZfX9DiUO…...

UCRT 和 MSVC 的区别(Windows 平台上 C/C++ 开发相关)

UCRT 和 MSVC 是与 Windows 平台上 C/C 开发相关的两个重要概念,它们都属于 Microsoft 的开发工具链的一部分。下面详细解释它们的含义、区别以及用途。 一、UCRT(Universal C Runtime) 1. 含义: UCRT(Universal C …...

rabbitmq Fanout交换机简介

给每个服务创建一个队列,然后每个业务订阅一个队列,进行消费。 如订单服务起个多个服务,代码是一样的,消费的也是同一个队列。加快了队列中的消息的消费速度。 可以看到两个消费者已经在消费了...

【机器学习】集成学习与梯度提升决策树

目录 一、引言 二、自举聚合与随机森林 三、集成学习器 四、提升算法 五、Python代码实现集成学习与梯度提升决策树的实验 六、总结 一、引言 在机器学习的广阔领域中,集成学习(Ensemble Learning)犹如一座闪耀的明星,它通过组合多个基本学习器的力量,创造出…...

Palo Alto Networks Expedition存在命令注入漏洞(CVE-2025-0107)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

WebFuture:Ubuntu 系统上在线安装.NET Core 8 的步骤

方法一:使用官方二进制包安装 下载.NET Core 8 SDK 二进制包:访问 .NET Core 8 SDK 官方下载页面,根据你的系统架构选择对应的 Linux x64 版本等下载链接,将其下载到本地4. 创建安装目录:在终端中执行以下命令创建用于…...

JAVA-springboot JUnit单元测试

SpringBoot从入门到精通-第9章 JUnit单元测试 一、JUnit与单元测试 JUnit是一个开源的测试框架,虽然可以用于测试大多数编程语言的应用程序,但特别适合用于测试Java语言的应用程序。 软件测试一般分为4个阶段,即单元测试、集成测试、系统测…...

hot100 -- 6.矩阵系列

1.矩阵置零 问题:给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 方法:记录行列 置0 # 记录行列,分别置0 def set_zero(matrix):row, col [], []# 统计0元素…...

PyCharm中运行.py脚本程序

1.最近在弄一个python脚本程序,记录下运行过程。 2.编写的python程序如下 # # Copyright 2017 Pixar # # Licensed under the terms set forth in the LICENSE.txt file available at # https://openusd.org/license. # # Check whether this script is being run …...

吴恩达MCP课程(5):research_server_prompt_resource.py

代码 import arxiv import json import os from typing import List from mcp.server.fastmcp import FastMCPPAPER_DIR "papers"# Initialize FastMCP server mcp FastMCP("research")mcp.tool() def search_papers(topic: str, max_results: int 5) …...

[论文阅读] 人工智能+项目管理 | 当 PMBOK 遇见 AI:传统项目管理框架的破局之路

当PMBOK遇见AI:传统项目管理框架的“AI适配指南” 论文信息 arXiv:2506.02214 Is PMBOK Guide the Right Fit for AI? Re-evaluating Project Management in the Face of Artificial Intelligence Projects Alexey Burdakov, Max Jaihyun Ahn Subjects: Software …...

Gateway 搭建

1.创建 moudle 命名为 gateway 2,pom中引入依赖 网关依赖&#xff1b;注册中心依赖等 <!-- 网关依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></d…...

pytorch基本运算-导数和f-string

引言 在前序对机器学习的探究过程中&#xff0c;我们已经深刻体会到人工智能到处都有微分求导运算&#xff0c;相关文章链接包括且不限于&#xff1a; BP神经网络 逻辑回归 对于pytorch张量&#xff0c;求导运算必不可少&#xff0c;所以本次就专门来学习一下。 f-string的用…...

impala中更改公网ip为内网ip

实际有时候需求中需要将公网的impala监听ip改为内网的ip 步骤 1&#xff0c;更改配置文件中的ip 1&#xff0c;更改/etc/default/impala中的ip配置重启服务即可在hive元数据同一个节点上要启动sudo service impala-state-store restartsudo service impala-catalog restart所有…...

5.RV1126-OPENCV 图形计算面积

一.图形面积、弧长计算介绍 前面我们已经把图形轮廓的检测、画框等功能讲解了一遍。这次主要结合轮廓检测的 API 去计算图形的面积&#xff0c;这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能&#xff0c;常用的 API 如 contourArea…...

一键净化Excel数据:高性能Python脚本实现多核并行清理

摘要 本文分享两个基于Python的Excel数据净化脚本&#xff0c;通过多进程并行技术清除工作表内不可见字符、批注、单元格样式等冗余内容&#xff0c;利用OpenPyXL实现底层操作&#xff0c;结合tqdm进度条和进程级任务分配&#xff0c;可快速处理百万级单元格数据。适用于数据分…...

【Android基础回顾】一:Binder机制是什么?有什么用?

Android中的Binder机制是Android系统中最核心和最基础的进程间通讯机制。 1 什么是进程间通讯机制(IPC)&#xff1f; 众所周知&#xff0c;Android系统基于Linux开发&#xff0c;Linux系统里面本来就有进程间通讯机制。 1.1 Linux的IPC(Inter-Process Communication)概览 它…...

LeetCode 高频 SQL 50 题(基础版) 之 【高级查询和连接】· 上

题目&#xff1a;1731. 每位经理的下属员工数量 题解&#xff1a; select employee_id,name,reports_count,average_age from Employees t1,(select reports_to,count(*) reports_count,round(avg(age)) average_agefrom Employeeswhere reports_to is not nullgroup by repor…...

资产智慧管理安全监测中心

在数字经济高速发展的今天&#xff0c;资产管理的智能化已成为企业降本增效的核心竞争力。从智慧园区到古建筑群&#xff0c;从交通枢纽到城市电网&#xff0c;资产智慧管理安全监测中心正以物联网、人工智能、数字孪生等技术为支撑&#xff0c;构建起资产全生命周期的“智慧大…...

从零开始的云计算——番外实战,iptables防火墙项目

目录 一网络规划 二项目要求 三环境准备 1防火墙设置 2PC1设置 3PC2设置 4服务器S1设置 四环境检测 1内网链接 2外网连接 五防火墙配置及测试 1内部网络中的pc1采用SNAT访问外部互联网&#xff0c;但是无法ping到内部网关。 ​编辑​编辑 2内部网络服务器s1通过DN…...

移动网页调试的多元路径:WebDebugX 与其他调试工具的组合使用策略

在移动端网页开发中&#xff0c;仅靠一款工具很难覆盖所有调试场景。不同问题类型需要不同的调试维度——有时是网络请求&#xff0c;有时是 DOM 样式&#xff0c;有时是 JS 状态&#xff0c;有时是性能瓶颈。 本文以“多工具协作”为核心思想&#xff0c;结合多个项目经验&am…...