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