2017-07-25 117 views
0

我想使用/proc/<pid>/map目錄來獲取有關進程的虛擬內存(特別是關於它的共享庫)的信息。由於mac os沒有,我試圖找到其他方法。其中之一似乎是sysctl電話,但我不太明白如何將其用於此目的。有沒有例子?我知道這也可以通過一些mach_vm接口調用來完成,但是文檔相當流行。也許你知道任何其他讀取進程內存的方式?順便說一下,我的Mac OS版本是達爾文。 注意:目的是在不使用任何實用程序或fork/exec調用的情況下執行此操作。我也不想要安裝任何pseudofs獲取/ proc/<pid> /在mac os下使用sysctl調用的地圖信息

回答

1

macOS的虛擬內存子系統位於內核的Mach繼承部分,所以這些API肯定是使用的。對於檢查區域,請查看mach_vm_region()(在原始馬赫中稱爲vm_region--您會發現more documentation),用於讀取內存,請使用mach_vm_read()

您可能還會發現vmmap命令行實用程序對探索有用。

+0

問題的確是'mach_vm_region'只能告訴該區域是共享的,但沒有選項可以找到哪個區域代表哪個共享庫。我想要類似於'vmmap -allStliptLibs'的功能。有沒有可能訪問鏈接器? – Artyom

+0

我不知道有辦法做到這一點。即使vmmap本身鏈接到Symbolication.framework。內核在內部持有對'vnode_t'的引用,但據我所知,甚至沒有公開的KPI用於從kext訪問它。 – pmdj