2016-02-22 39 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

相關問題