我经历了this blogthis 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的一部分,因此这是必须的方法。通常使用库包装器访问该文件系统中的许多数据,但这就是数据所在的地方。

10-07 16:43