我在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
答案 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()
之类的东西。