使用 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()
之类的东西。
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()
之类的东西。