[英]Catching Mach system calls using dtruss
我在vmmap上運行了dtruss,該進程是讀取另一個遠程進程的虛擬內存的進程。
我希望某些mach_port系統調用會出現在我的命令的輸出中,但無法跟蹤任何內容(即mach_vm_read,task_for_pid等)。
我運行的確切命令(注意dtruss是OS-X中dtrace的包裝腳本):
sudo dtruss vmmap <pid_of_sample_process>
vmmap的輸入參數只是任何正在運行的進程的pid,我使用的OS版本是10.10(在10.11中,在諸如vmmap的蘋果產品上運行dtruss時存在授權問題)。
也許有人可以告訴我如何識別我正在尋找的系統調用...我應該在dtruss輸出中查找顯式名稱,還是只是我所需的syscall的常規調用號(遺憾的是,我沒有找到任何他們):
./bsd/kern/trace.codes:0xff004b10 MSG_mach_vm_read
在我看來,它沒有使用Mach API。 它使用libproc接口。 我看到了許多proc_info()
syscall,這就是像proc_pidinfo()
這樣的庫調用背后的東西。
我用了:
sudo dtrace -n 'pid$target::proc_*:entry {}' -c 'vmmap <some PID>'
跟蹤被調用的各種libproc函數。 我看到調用proc_name()
, proc_pidpath()
和proc_pidinfo()
以獲得有關目標進程的信息,然后調用proc_regionfilename()
以獲得有關VM區域的信息。
順便說一句, vmmap
不會讀取其他進程的內存,它只會報告有關VM區域的信息,而不是它們的內容。 因此,我不希望看到mach_vm_read()
之類的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.