我经历了this blog和this videocast。在Windows中,如果我想检索有关指定进程的虚拟地址空间内的一系列页面的信息,则可以使用WinAPI VirtualQueryEx
method:
MEMORY_BASIC_INFORMATION meminfo;
unsigned char *addr = 0;
for(;;)
{
if(!VirtualQueryEx(hProc, addr, &meminfo, sizeof(meminfo)))
break;
if(meminfo.State & MEM_COMMIT)
{
//collect some data from meminfo
}
addr = (unsigned char*)meminfo.BaseAddress + meminfo.RegionSize;
}
我想知道如何在Linux中使用syscalls获得类似的信息,但是对于我来说,目前尚不清楚如何在Linux下使用C / C++收集此类数据。当有人建议查看
/proc/<pid>/mem
或/proc/<pid>/maps
文件时,我经历了this thread。这是个好方向吗?对于Linux,应该如何看待与此处提供的最接近的实现? 最佳答案
是的,proc
文件系统是Linux API的一部分,因此这是必须的方法。通常使用库包装器访问该文件系统中的许多数据,但这就是数据所在的地方。