Мониторинг аргументов вызова dylib в Macos - PullRequest
0 голосов
/ 16 декабря 2018

Я бы хотел что-то похожее на apimonitor , но для Macos.Уже есть что-то подобное?Спасибо.Я хотел бы иметь возможность знать аргументы, используемые приложением при вызове функций dylib.

1 Ответ

0 голосов
/ 17 декабря 2018

У вас есть несколько вариантов:

Рассматривали ли вы просто присоединение к приложению отладчика (т.е. 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_* в исполняемый файл.

...