2016-02-22 41 views
7

我想弄清楚VMMAP过程是如何运作的。找到XNU项目中的__proc_info符号

用dtrace运行这个可执行文件后,似乎提取了虚拟内存中每个节的地址空间的proc_regionfilename方法。

所以,我挖得更深一些,发现其在XNU执行文件
libsyscall /包装/ 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); 

然而,这个符号C annot在代码中找到,我想知道它是如何在预编译,编译,链接或实时创建的。

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

感谢

回答

1

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

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

+0

谢谢,但为什么它在声明中libproc.c错位的形式是由(__proc_info而不是proc_info)? – Zohar81

+0

我认为'__proc_info'是系统调用shim,它将常规函数调用约定转换为syscall约定,并实际上导致陷阱进入内核空间。这些是从内核的syscall表中自动生成的,所以你不会为它们找到任何直接的源代码。不是100%确定。 – pmdj

相关问题