6

我想弄清楚 VMMAP 进程是如何运作的。

使用 dtrace 运行此可执行文件后,似乎是提取虚拟内存中每个部分的地址空间的方法 proc_regionfilename。

所以,我挖得更深了,在 xnu 中的
libsyscall/wrappers/libproc/libproc.c文件下找到了它的实现

在函数体中,我看到主要调用是 proc_pidinfo :

retval = proc_pidinfo(pid, PROC_PIDREGIONPATHINFO, (uint64_t)address, &reginfo, sizeof(struct proc_regionwithpathinfo));

而 proc_pidinfo 又调用 __proc_info 符号:

int __proc_info(int callnum, int pid, int flavor, uint64_t arg, void * buffer, int buffersize);

但是,在代码中找不到这个符号,我想知道它是如何在预编译、编译、链接或实时过程中创建的。

知道我在哪里可以找到它,或者它是如何创建的(我还没有尝试编译内核)。

谢谢

4

1 回答 1

3

proc_info是一个系统调用,所以它的实现在内核中。可以在此处找到 10.11.2 中的版本的源代码:

http://opensource.apple.com/source/xnu/xnu-3248.20.55/bsd/kern/proc_info.c

于 2016-02-22T10:48:13.817 回答