我想弄清楚 VMMAP 进程是如何运作的。
使用 dtrace 运行此可执行文件后,似乎是提取虚拟内存中每个部分的地址空间的方法 proc_regionfilename。
所以,我挖得更深了,在 xnu 中的
libsyscall/wrappers/libproc/libproc.c文件下找到了它的实现
在函数体中,我看到主要调用是 proc_pidinfo :
retval = proc_pidinfo(pid, PROC_PIDREGIONPATHINFO, (uint64_t)address, ®info, sizeof(struct proc_regionwithpathinfo));
而 proc_pidinfo 又调用 __proc_info 符号:
int __proc_info(int callnum, int pid, int flavor, uint64_t arg, void * buffer, int buffersize);
但是,在代码中找不到这个符号,我想知道它是如何在预编译、编译、链接或实时过程中创建的。
知道我在哪里可以找到它,或者它是如何创建的(我还没有尝试编译内核)。
谢谢