使用dtruss捕获Mach系统调用

时间:2016-01-31 11:53:22

标签: c macos memory dtruss vmmap

我在vmmap上运行dtruss,这是一个读取另一个远程进程的虚拟内存的进程。

我希望一些mach_port系统调用会出现在我的命令输出中,但无法跟踪任何(即mach_vm_read,task_for_pid等等)

我运行的确切命令(请注意,dtruss是OS-X中dtrace的包装脚本):

sudo dtruss vmmap <pid_of_sample_process>  

vmmap的输入参数只是任何正在运行的进程的pid,我使用的操作系统版本是10.10(在10.11中,当对诸如vmmap等苹果产品运行dtruss时存在权利问题。)

也许有人可以告诉我如何识别我正在寻找的系统调用...我应该在dtruss输出中查找显式名称,还是只查找我所需系统调用的一般电话号码(遗憾的是,我没有发现其中任何一个):

./bsd/kern/trace.codes:0xff004b10       MSG_mach_vm_read

1 个答案:

答案 0 :(得分:2)

在我看来,它不使用Mach API。它使用的是libproc接口。我看到很多proc_info()系统调用,这就是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()之类的东西。