我经历了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中获取类似的信息集,但我不清楚如何使用C / C ++在Linux下收集这样的数据。当有建议要查看/proc/<pid>/mem
或/proc/<pid>/maps
文件时,我经历了this thread。这是好方向吗?应该如何看待与此处提供的最接近的实现,但是对于Linux?
答案 0 :(得分:1)
是的,proc
文件系统是Linux API的一部分,所以这是要走的路。通常使用库包装器访问该文件系统中的大量数据,但这就是数据所在的位置。
答案 1 :(得分:0)
据我所知/proc/<pid>/maps
是唯一可靠且受支持的方式。{p>甚至libunwind
is using it:
if (maps_init (&mi, getpid()) < 0)
return -1;
unsigned long offset;
while (maps_next (&mi, &low, &hi, &offset)) {
struct dl_phdr_info info;
info.dlpi_name = mi.path;
info.dlpi_addr = low;