windows内核开发:如何使用反汇编引擎

ops/2024/9/25 10:35:13/

前言

最近在写个人项目中需要在内核模式下使用到反汇编引擎,找到几个并使用对比后我强烈推荐一款名叫BeaEngine的反汇编引擎。这是它的项目仓库链接:https://github.com/BeaEngine/beaengine

编译

项目下载下来后需要使用CMake编译,在此之前确保你的Visual studio*已安装支持CMake编译。我使用的是Visual Studio2019。操作流程:

  1. 打开VS2019,选择菜单中的文件,下拉框中选择CMake。此时会弹出打开文件对话框,选择并打开你下载保存的BeaEngine项目中的CMakeLists.txt文件。
  2. 默认的CMake配置只有x64,我们可以新增x32的编译选项。选择配置里的“+”号3. 在这里插入图片描述
  3. 选择x86-debug
    在这里插入图片描述
  4. 并分别对这两个配置进行一些参数的修改。选择其中一个配置,例如x64-Debug。我们修改为使用vs2019编译
    在这里插入图片描述另一个x86-Debug配置则修改为
    在这里插入图片描述
  5. 分别编译生成vs项目
    在这里插入图片描述
  6. 使用vs2019打开生成的项目文件,在项目属性-》C/C++ -》高级-》调用约定改为 _stdcall,然后再预处理器-》预处理器定义里面添加 _NO_CRT_STDIO_INLINE
  7. 项目属性-》链接器-》命令行中添加 /kernel
  8. 生成BeaEngine_s_d_l项目,即可得到对应架构的BeaEngine_s_d_l.lib

BeaEngine_16">在项目中使用BeaEngine

  1. 属性-》VC++目录 -》包含目录中添加BeaEngine项目中BeaEngine.h的位置。
  2. 属性-》VC++目录 -》库目录中添加BeaEngine项目中对应架构的BeaEngine_s_d_l.lib的位置
  3. 属性-》C/C++ -》预处理器-》预处理器定于中添加BEA_ENGINE_STATICBEA_USE_STDCALL
  4. 属性-》链接器-》附加依赖项中添加BeaEngine_s_d_l.lib

然后就可以正常编码了,以下是使用示例。

VOID DecodeIns(PVOID Address,ULONG Size)
{DISASM disAsm = { 0 };disAsm.EIP = (UIntPtr)Address;disAsm.VirtualAddr = (UIntPtr)Address;PUCHAR pEnd = (PUCHAR)(disAsm.EIP + Size);LONG len;while (disAsm.Error >= 0){disAsm.SecurityBlock = (UIntPtr)pEnd - disAsm.EIP;if ((Int32)disAsm.SecurityBlock <= 0) break;len = Disasm(&disAsm);switch (disAsm.Error){case OUT_OF_BLOCK:break;case UNKNOWN_OPCODE:disAsm.EIP += 1;disAsm.VirtualAddr += 1;break;default:{disAsm.EIP += len;disAsm.VirtualAddr += len;break;}}}
}

http://www.ppmy.cn/ops/32358.html

相关文章

数据结构学习/复习6---双向链表的实现/随机指针链表练习/顺序表与链表对比/存储体系简述

一、链表的结构*8 二、带头双向循环链表的实现 注意事项1&#xff1a;是否需要断言于实际情况中传来的指针是否可以为空&#xff0c;不可以则要断言 三、链表、指针、拷贝经典练习题 四、顺序表与链表总结对比

【redis】Redis数据类型(四)Set类型

目录 Set类型介绍使用场景 Set类型数据结构set的单个元素的添加过程IntSet哈希表内存结构 常用命令SADD示例 SREM示例 SMEMBERS示例 SISMEMBER示例 SCARD示例 SMOVE示例 SPOP示例 SRANDMEMBER示例 SINTER示例 SINTERSTORE示例 SUNION示例 SUNIONSTORE示例 SDIFF示例 SDIFFSTORE…

MySQL 和 Hive 存储引擎对表数量、索引有那些限制?

目录 MySQL 存储引擎限制 Hive 存储引擎限制 MySQL 存储引擎限制 MySQL支持多种存储引擎&#xff0c;如InnoDB和MyISAM&#xff0c;每种引擎都有自己的特性和限制。 最大表数: InnoDB存储引擎没有硬性限制表的数量&#xff0c;它通常受限于操作系统文件数的限制。MyISAM存储引…

公开课—京东生产环境海量数据架构优化实战

文章目录 读多写少——主库用来写&#xff0c;从库用来读单库的写压力太大——数据库的垂直和水平拆分分表怎么分呢&#xff1f;hash分表range分表多数据源操作与分布式事务问题 ShardingSphare分库分表&#xff08;京东开源&#xff09;关联查询怎么办&#xff1f;跨多个库&am…

机器学习笔记-22

终章 至此吴恩达老师的机器学习课程已经完成啦&#xff0c;总结一下&#xff1a; 1.监督学习的算法&#xff1a;线性回归、逻辑回归、神经网络和向量机 2.无监督学习的算法&#xff1a;K-Means、PCA、异常检测 3.推荐系统、大规模数据处理、正则化、如何评估算法 4.上限分析、…

鸿蒙OpenHarmony【轻量系统 烧录】 (基于Hi3861开发板)

烧录 针对Hi3861开发板&#xff0c;除了DevEco Device Tool&#xff08;操作方法请参考烧录&#xff09;外&#xff0c;还可以使用Hiburn进行烧录。 前提条件 开发板相关源码已编译完成&#xff0c;已形成烧录文件。客户端&#xff08;操作平台&#xff0c;例如Windows系统&…

java的嵌套循环

在java中&#xff0c;也有嵌套循环。 下面是一个示例代码 public class Example17qiantaoxunhuan {public static void main(String[] args) {int i,j;for(i1;i<9;i){for(j1;j<i;j){System.out.println("*");}System.out.println("\n");}}}这段代码…

Ps 图像转线稿

案例图&#xff1a; 步骤一&#xff1a;首先&#xff0c;按下CtrlShiftU快捷键&#xff0c;将图像转换为灰度模式&#xff0c;去除所有颜色信息&#xff0c;只留下黑白灰的色调。 步骤二&#xff1a;按下CtrlJ快捷键&#xff0c;复制当前图层&#xff0c;得到一个新的图层副本。…