Системные вызовы Catching Mach с использованием dtruss

Я запустил dtruss на vmmap, который считывает виртуальную память другого удаленного процесса.

Я ожидаю, что некоторые системные вызовы mach_port появятся в выводе моей команды, но не смогут отследить их (например, mach_vm_read, task_for_pid и т. Д.)

Точная команда, которую я выполнил (обратите внимание, что dtruss является сценарием оболочки dtrace в OS-X):

sudo dtruss vmmap <pid_of_sample_process>  

Входной аргумент для vmmap - это просто pid любого запущенного процесса, и используемая мной версия ОС - 10.10 (в 10.11 есть проблема с правами при запуске dtruss для продуктов Apple, таких как vmmap).

Возможно, кто-то может сказать мне, как определить системный вызов, который я ищу... Должен ли я искать явное имя в выводе dtruss или просто общий номер вызова желаемого системного вызова (к сожалению, я не нашел ни одного из их):

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

1 ответ

Решение

Мне кажется, что он не использует 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() получить информацию о регионах ВМ.

Кстати, vmmap не читает память другого процесса, он просто сообщает информацию об областях виртуальной машины, а не их содержимое. Так что я не ожидал увидеть mach_vm_read() или т.п.

Другие вопросы по тегам