1

我在 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
4

1 回答 1

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()或类似的东西。

于 2016-01-31T17:38:39.850 回答