7
我想弄清楚VMMAP过程是如何运作的。找到XNU项目中的__proc_info符号
用dtrace运行这个可执行文件后,似乎提取了虚拟内存中每个节的地址空间的proc_regionfilename方法。
所以,我挖得更深一些,发现其在XNU执行文件
libsyscall /包装/ 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);
然而,这个符号C annot在代码中找到,我想知道它是如何在预编译,编译,链接或实时创建的。
任何想法在哪里可以找到它,或者它是如何被创建的(我还没有尝试编译内核)。
感谢
谢谢,但为什么它在声明中libproc.c错位的形式是由(__proc_info而不是proc_info)? – Zohar81
我认为'__proc_info'是系统调用shim,它将常规函数调用约定转换为syscall约定,并实际上导致陷阱进入内核空间。这些是从内核的syscall表中自动生成的,所以你不会为它们找到任何直接的源代码。不是100%确定。 – pmdj