В Windows есть несколько библиотек, которые позволяют перехватывать вызовы в DLL:
http://www.codeproject.com/kb/system/hooksys.aspx
Возможно ли это сделать на Mac OS? Если да, то как это делается?
В Windows есть несколько библиотек, которые позволяют перехватывать вызовы в DLL:
http://www.codeproject.com/kb/system/hooksys.aspx
Возможно ли это сделать на Mac OS? Если да, то как это делается?
Ответ зависит от того, хотите ли вы сделать это в своем собственном приложении или в системе. В вашем собственном приложении это довольно легко; динамический компоновщик предоставляет такие функции, как DYLD_INSERT_LIBRARIES
. Если вы делаете это для целей отладки/контроля, также проверьте DTrace.
Вы можете заменить реализации метода Objective-C на метод swizzling, например. JRSwizzle или Apple method_exchangeImplementations
(10.5 +).
Если вы хотите изменить поведение библиотеки по всей стране, вам понадобится загрузить в адресные пространства других процессов.
mach_inject/mach_override
- это набор библиотек с открытым исходным кодом для загрузки кода и замены реализации функций соответственно; однако вы несете ответственность за создание собственного приложения, которое использует библиотеки. (Кроме того, посмотрите этот ответ, вам нужны специальные разрешения для ввода кода в другие процессы.)Пожалуйста, имейте в виду, что приложение для исправления/ввода кода для целей не отладки настоятельно запрещено Apple, и некоторые пользователи Mac (и разработчики) крайне критично относятся к этой практике. Большая часть этой критики плохо информирована, но было множество законно плохо написанных "плагинов" (особенно те, которые исправляют Safari), которые были замешаны в сбоях и проблемах приложений. Код защищен.
(Отказ от ответственности: Я являюсь автором (бесплатного) модуля APE и приложения, которое использует mach_inject
.)