我有一个使用CLR主机的小型C++应用程序,我需要通过dotnet从C++访问内存映射数据(作为原始数据)。
我发现它的大小是固定的,我想知道如何执行相同的过程VMMap确实会获取私有(private)内存块的列表并检查大小,如果它们与我读取地址的大小匹配。
Memory Block Screenshot
我如何获取该内存数据?
最佳答案
Here's an open source project 带有您想要的确切内容,并且代码编写得非常整洁,对我有很多帮助,非常感谢作者。
查看VMMap.cpp文件。
process(GetCurrentProcessId()
这是一个使用 VMMap库代码的函数示例:
process* target_process;
unsigned long long GetPrivateMemoryAddressBySize(DWORD pid,long size,int offset)
{
target_process = &(process(pid));
process_memory memory(*target_process);
for (std::map<unsigned long long, process_memory_group>::const_iterator it_group = memory.groups().begin(); it_group != memory.groups().end(); it_group++) {
if ((*it_group).second.size() / 1024 == size) {
return (*it_group).second.base() + offset;
}
}
return 0;
}
关于c++ - 从自身获取进程的私有(private)内存页(如VMMap),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60475968/