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