У вас есть несколько вариантов:
Рассматривали ли вы просто присоединение к приложению отладчика (т.е. lldb
), установку точки останова на интересующей функции и наблюдение за аргументами?Вы можете установить точку останова для автоматической печати аргументов и затем продолжить.
Вы можете использовать pid
провайдер DTrace.Большая часть DTrace отключена защитой целостности системы (SIP).Я не помню, если pid
провайдер или нет.Если он отключен, его можно включить при загрузке в режиме восстановления с помощью команды csrutil
(csrutil enable --without dtrace
).
В любом случае, команда для использования поставщика pid
:
sudo dtrace -n 'pid$target:library pattern:function pattern:entry { actions }' -p <PID of target>
Шаблоны в стиле file-glob, с использованием *
для сопоставления с любыми символами и ?
для сопоставления с одним символом.
Действие может быть чем-то вроде ustack();
для сброса пользовательского стека, printf("%x\n", arg0);
для печати первого аргумента и т. Д. Подробнее см. В руководстве DTrace.
Наконец, вы можете использовать переменную окружения DYLD_INSERT_LIBRARIES
, чтобы добавить собственную библиотеку.Эта библиотека, в свою очередь, может использовать символ dyld, вставляя , чтобы установить собственную версию данной функции или функций, которые могут делать все, что вы захотите.Он может обращаться к оригиналу и, таким образом, действовать как оболочка.
Обратите внимание, что SIP также может мешать передаче переменных среды DYLD_*
в исполняемый файл.