在 XNU 项目中找到 __proc_info 符号
Locate __proc_info symbol in XNU project
我想弄清楚 VMMAP 进程是如何运行的。
在运行这个带有dtrace的可执行文件之后,似乎是proc_regionfilename提取虚拟内存中每个部分的地址space的方法。
所以,我深挖了一点,在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);
但是,在代码中找不到这个符号,我想知道它是如何在预编译、编译、link或实时创建的。
知道在哪里可以找到它,或者它是如何创建的(我还没有尝试编译内核)。
感谢
proc_info
是一个系统调用,所以它的实现在内核中。 10.11.2版本的源代码可以在这里找到:
http://opensource.apple.com/source/xnu/xnu-3248.20.55/bsd/kern/proc_info.c
我想弄清楚 VMMAP 进程是如何运行的。
在运行这个带有dtrace的可执行文件之后,似乎是proc_regionfilename提取虚拟内存中每个部分的地址space的方法。
所以,我深挖了一点,在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);
但是,在代码中找不到这个符号,我想知道它是如何在预编译、编译、link或实时创建的。
知道在哪里可以找到它,或者它是如何创建的(我还没有尝试编译内核)。
感谢
proc_info
是一个系统调用,所以它的实现在内核中。 10.11.2版本的源代码可以在这里找到:
http://opensource.apple.com/source/xnu/xnu-3248.20.55/bsd/kern/proc_info.c