我需要得到当前应用程序的所有内存Map库的文件名。目前我正在通过vm_region浏览所有Map库。遗憾的是,它没有提供当前区域的文件名信息。有没有办法在c中得到这些信息,而不用在vmmap上执行popen?
xtfmy6hx1#
mmap
proc_regionfilename()
vm0i2vca2#
下面介绍如何使用libproc.h和proc_pidinfo()列出mmmap文件:
#include <stdio.h> #include <stdlib.h> #include <libproc.h> int main (int argc, char **argv) { if (argc < 2) exit(1); int pid = atoi(argv[1]); struct proc_regionwithpathinfo prwpi; uint64_t address = 0; uint64_t last_ino = 0; while (1) { int retval = proc_pidinfo(pid, PROC_PIDREGIONPATHINFO, address, &prwpi, sizeof(prwpi)); if (retval <= 0) { break; } else if (retval < sizeof(prwpi)) { perror("proc_pidinfo"); exit(1); } char *path = prwpi.prp_vip.vip_path; uint64_t ino = prwpi.prp_vip.vip_vi.vi_stat.vst_ino; if (path && path[0] && ino != last_ino) { printf("path is %s\n", path); last_ino = ino; } address = prwpi.prp_prinfo.pri_address + prwpi.prp_prinfo.pri_size; } return 0; }
2条答案
按热度按时间xtfmy6hx1#
mmap
-艾德文件,可以使用proc_regionfilename()
vm0i2vca2#
下面介绍如何使用libproc.h和proc_pidinfo()列出mmmap文件: