kvm的memory接口介绍
kvm的memory接口介绍
波奇大帝✅ 类构造与析构
1 | Memory::Memory() { } |
- 析构时关闭句柄,重置标志。
- ✅ 建议加上
nullptr检查或异常安全的关闭逻辑。
✅ DumpMemoryMap
1 | bool Memory::DumpMemoryMap(bool debug) |
- 生成物理内存映射文件
mmap.txt并写入临时目录(Windows 路径)。 - ✅ 用于
-memmap参数提升物理内存访问性能。 - ⚠️ Windows 路径写死为
\\mmap.txt,在 Linux 下需修改为/tmp/mmap.txt形式,建议使用std::filesystem::path::preferred_separator。
✅ Init
1 | bool Memory::Init(std::string process_name, bool memMap, bool debug) |
- 初始化
VMMDLL连接、插件、导入 mmap.txt。 - 自动 fallback:如果开启
memMap初始化失败,则重试禁用 mmap。 - ✅ 自动修复 CR3。
- ⚠️ 参数列表太多建议结构化,长逻辑建议拆分子函数。
✅ GetPidFromName
1 | DWORD Memory::GetPidFromName(std::string process_name) |
- 获取指定进程名的 PID。
- 简洁直观 ✅
✅ GetPidListFromName
1 | std::vector<int> Memory::GetPidListFromName(std::string name) |
- 支持模糊匹配多个同名进程。
- ✅ 返回多个匹配项用于多进程游戏处理。
✅ GetModuleList
1 | std::vector<std::string> Memory::GetModuleList(std::string process_name) |
- 获取进程中模块名列表。
- 可用于检查注入模块、判断是否加载 DLL。
✅ GetProcessInformation
- 返回当前进程的完整
VMMDLL_PROCESS_INFORMATION。 - ✅ 可拓展做模块偏移判断或附加信息展示。
✅ GetBaseDaddy / GetBaseSize
1 | size_t GetBaseDaddy(std::string module_name) |
- 获取模块基址与大小。
- ✅ 多模块支持。
- ⚠️ 变量命名可改为
GetModuleBaseAddress更语义化。
✅ GetExportTableAddress / GetImportTableAddress
1 | uintptr_t GetExportTableAddress(std::string import, std::string process, std::string module) |
- 解析模块导出 / 导入表,返回指定函数的地址。
- ✅ 支持跨模块解析。
- ⚠️
mem.GetPidFromName(process)调用依赖全局对象mem,建议改为类成员或参数传入,避免耦合。
✅ FixCr3
- 修复 DTB / CR3,使得
memflow能正确解析虚拟地址。 - 从
dtb.txt中遍历候选项,尝试修复并检测 magic。 - ✅ 自动化 CR3 修复。
- ⚠️ 强依赖
procinfo插件和其格式,建议加超时逻辑避免卡死。
✅ FindSignature
- 签名扫描逻辑,支持通配符
?。 - 读取整个区段内容后本地匹配。
- ⚠️ 若 range 很大(如整个
.text区),会造成内存消耗大,应考虑分页读取优化。
✅ Scatter API 封装
1 | VMMDLL_SCATTER_HANDLE CreateScatterHandle() |
- 封装 Scatter 操作批处理 DMA。
- ✅ 用于高性能读写。
- ⚠️ 建议统一处理失败情况并暴露错误码(不是单纯 LOG)。
✅ get_base_address
1 | uint64_t get_base_address() |
- 快捷访问当前进程或指定模块的基址。
- ✅ 可直接用于偏移计算。
总结与优化建议
| 类型 | 建议 |
|---|---|
| ✅ 正确性 | 功能完整、覆盖广,适配主流memflow接口,逻辑合理。 |
| 🧠 可读性 | 方法命名建议更语义化(如GetBaseDaddy→GetModuleBase),参数可结构化。 |
| 🧱 模块性 | 避免使用全局mem,函数间解耦更好。 |
| ⚡ 性能 | FindSignature建议分页查找,避免一次性读大内存;DumpMemoryMap 路径写法兼容 Linux。 |
| 🔒 稳定性 | FixCr3建议加超时保护;VMMDLL_*使用需判断句柄是否有效,防止空指针。 |






