DMALibrary Memory类API参考手册:核心接口参数与返回值完整清单
2026/8/25 18:02:33 网站建设 项目流程

DMALibrary Memory类API参考手册:核心接口参数与返回值完整清单

【免费下载链接】DMALibrarySimple but extensive library for DMA users, made for gamehacking项目地址: https://gitcode.com/gh_mirrors/dm/DMALibrary

DMALibrary 是一款面向 DMA(直接内存访问)用户的开发库,核心Memory类封装了 DMA 内存读写、签名扫描、Scatter 批量读写等全部基础操作。本文为 DMALibrary Memory 类 API 参考手册,完整梳理每个接口的参数与返回值,帮助新手快速上手 DMA 内存读写开发。

💡 适合人群:刚接触 DMA 开发、想快速掌握 Memory 类接口用法的开发者。

认识 DMALibrary:Memory 类能做什么

DMALibrary 将vmm.dllFTD3XX.dllleechcore.dll三个底层库封装成易用的 C++ 接口,开箱即用的能力包括:

  • ⚡ 签名扫描(Sig Scanning)
  • ⚡ 内存读写(Read / Write)
  • ⚡ Scatter 批量读写
  • ⚡ 物理内存地图转储(Dump Memory Map)
  • ⚡ 模块内存转储(Dumping Memory)
  • ⚡ EAC 的 CR3 修复(Fix CR3)
  • ⚡ 目标机键盘状态读取
  • ⚡ PID、基础地址、模块列表等实用工具

Memory 类的定义位于DMALibrary/Memory/Memory.h,并提供了全局单例mem,所有接口都通过它直接调用。

快速上手:3 步完成 DMA 初始化

📌 使用任何接口前,先完成这三步:

第 1 步:准备依赖文件

vmm.dllFTD3XX.dllleechcore.dll(由 DMA 设备供应商提供)放到程序根目录。若使用 CR3 修复功能,还需symsrv.dlldbghelp.dllinfo.db(项目内提供了DMALibrary/info.dbExample/info.db)。

第 2 步:调用 Init 初始化

bool Init(std::string process_name, bool memMap = true, bool debug = false)

参数说明
process_name目标进程名,如 "explorer.exe"
memMap为 true 时先转储物理内存地图到临时目录,提升 DMA 读取速度
debug为 true 时输出底层调试日志

返回值true成功 /false失败(常见原因:设备未连接、进程不存在)。Init 内部会自动完成 PID 获取、CR3 修复、基础地址与大小获取,示例见Example/Example.cpp

第 3 步:获取模块基础地址,开始读写内存

核心接口清单一:初始化与进程信息

接口参数返回值说明
Init进程名、memMap、debugbool初始化 DMA 与目标进程
GetPidFromName进程名DWORD获取进程 PID,0 表示失败
GetPidListFromName进程名std::vector<int>获取所有匹配进程的 PID 列表
GetModuleList进程名std::vector<std::string>获取目标进程的模块名列表
GetProcessInformationVMMDLL_PROCESS_INFORMATION获取进程详细信息,失败返回空结构
GetProcessPebPEB读取进程的 PEB 结构
FixCr3bool修复 EAC 造成的 CR3 异常,需依赖符号文件

💡 FixCr3 已在 Init 中自动调用;若进程重启后需要重新修复,可手动再调一次。

核心接口清单二:基础地址、导入导出表与内存转储

接口参数返回值说明
GetBaseDaddy模块名(可传进程名取主模块)size_t模块基础地址,0 表示失败
GetBaseSize模块名size_t模块映像大小
GetExportTableAddress导出名、进程名、模块名uintptr_t目标进程中导出函数的内存地址
GetImportTableAddress导入名、进程名、模块名uintptr_t目标进程中导入函数(IAT)的地址
DumpMemoryPE 基础地址、保存路径bool将模块内存转储为 PE 文件

💡 DumpMemory 注意事项:地址必须指向有效 PE 头;转储出的文件不会重建导入表(IAT),导入信息会缺失。

核心接口清单三:内存读写(最常用)

读写接口分两种风格:底层缓冲区风格与高层模板风格。

底层(缓冲区风格)

接口参数返回值说明
Read地址、目标缓冲区、大小bool读取目标进程内存
Read(带 pid 重载)上述参数 + 指定 PIDbool读取指定进程的内存
Write地址、源缓冲区、大小bool写入目标进程内存
Write(带 pid 重载)上述参数 + 指定 PIDbool写入指定进程的内存

高层(模板风格)

接口参数返回值说明
Read<T>地址类型为 T 的值直接读出指定类型的值,如 Read<int>、Read<uint64_t>
Read<T>(带 pid)地址 + PID类型为 T 的值从指定进程读取
Write<T>地址、值直接写入指定类型的值
ReadChain基础地址 + 偏移链 vector链末端的值一次调用读完整条指针偏移链

🎯 示例:mem.Read<int>(base + 0x66)即从基础地址偏移 0x66 处直接读出 4 字节整数;模板重载的内联实现可见DMALibrary/Memory/Memory.h

核心接口清单四:签名扫描

uint64_t FindSignature(const char* signature, uint64_t range_start, uint64_t range_end, int PID = 0)

参数说明
signature字节签名,支持通配符 ?,如 "48 ? ? ?"
range_start扫描起始地址
range_end扫描结束地址
PID可选,默认使用当前目标进程

返回值:第一个匹配位置的地址;返回 0 表示无匹配或参数无效(签名空、范围倒置等)。

💡 建议:先用 GetBaseDaddy 定位模块范围再扫描,范围过大时 DMA 扫描会非常缓慢。

核心接口清单五:Scatter 批量读写(高频场景必备)

每帧需要读取大量分散地址时(如批量读取游戏对象数据),逐次 Read 效率较低。Scatter 接口把多个请求攒批后一次性提交,可显著提升吞吐。

接口参数返回值说明
CreateScatterHandle无 / pidVMMDLL_SCATTER_HANDLE创建散读散写句柄
AddScatterReadRequest句柄、地址、缓冲区、大小追加一个读请求(另有模板重载自动推导大小)
AddScatterWriteRequest句柄、地址、缓冲区、大小追加一个写请求
ExecuteReadScatter句柄、pid(可选)执行全部读请求并清空队列
ExecuteWriteScatter句柄、pid(可选)执行全部写请求并清空队列
CloseScatterHandle句柄关闭句柄,务必调用以免内存泄漏

使用流程:创建句柄 → 追加请求 → 执行 → 关闭句柄,完整示例见Example/Example.cpp

核心接口清单六:获取子模块

Memory 类还封装了 3 个子模块,通过以下接口获取:

接口返回值说明
GetRegistryc_registry注册表读取,QueryValue 支持 REG_SZ、REG_DWORD 等类型
GetKeyboardc_keys*目标机键盘模块:InitKeyboard 初始化,IsKeyDown(虚拟键码) 检测按键按下
GetShellcodec_shellcode注入工具:find_codecave 找代码洞,call_function 注入并调用函数

子模块定义分别在DMALibrary/Memory/InputManager.hDMALibrary/Memory/Registry.hDMALibrary/Memory/Shellcode.h

常见问题 FAQ

Q:Init 返回 false,先检查什么?

依次确认:三个 DLL 是否在根目录、DMA 设备是否已连接、进程名是否正确。若 memMap 为 true 时初始化失败,会自动降级为无内存地图重试。

Q:Read 返回成功但值总是 0?

检查地址是否有效(GetBaseDaddy 是否为 0)、类型大小是否正确、CR3 是否已修复(观察 FixCr3 日志)。

Q:FixCr3 失败?

确认运行目录下存在symsrv.dlldbghelp.dllinfo.db

Q:为什么 Scatter 执行后读到的是旧值?

请求只是入队,必须调用 ExecuteReadScatter 之后缓冲区里才是新数据。

总结

DMALibrary 的 Memory 类把 DMA 开发的繁琐流程封装成一套即用型 C++ 接口:Init 初始化 → GetBaseDaddy 取基础地址 → Read/Write 读写 → FindSignature 定位特征 → Scatter 高频批量读写。本文已列出全部核心接口的参数与返回值,对照上文清单即可快速完成 DMA 内存读写开发。

【免费下载链接】DMALibrarySimple but extensive library for DMA users, made for gamehacking项目地址: https://gitcode.com/gh_mirrors/dm/DMALibrary

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询