使用 dtruss 捕获 Mach 系统调用

Catching Mach system calls using dtruss

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

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

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

sudo dtruss vmmap <pid_of_sample_process>  

vmmap 的输入参数只是任何 运行 进程的 pid,我使用的 OS 版本是 10.10(在 10.11 中,当 运行 dtruss on apple 时存在授权问题vmmap 等产品)。

也许有人可以告诉我如何识别我正在寻找的系统调用...我应该在 dtruss 输出中寻找明确的名称,还是只寻找我想要的系统调用的一般呼叫号码(遗憾的是,我没有找不到任何一个):

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

在我看来它没有使用 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() 之类的东西。