Подтвердить что ты не робот

Можно ли перехватывать вызовы API в Mac OS?

В Windows есть несколько библиотек, которые позволяют перехватывать вызовы в DLL:

http://www.codeproject.com/kb/system/hooksys.aspx

Возможно ли это сделать на Mac OS? Если да, то как это делается?

4b9b3361

Ответ 1

Ответ зависит от того, хотите ли вы сделать это в своем собственном приложении или в системе. В вашем собственном приложении это довольно легко; динамический компоновщик предоставляет такие функции, как DYLD_INSERT_LIBRARIES. Если вы делаете это для целей отладки/контроля, также проверьте DTrace.

Вы можете заменить реализации метода Objective-C на метод swizzling, например. JRSwizzle или Apple method_exchangeImplementations (10.5 +).

Если вы хотите изменить поведение библиотеки по всей стране, вам понадобится загрузить в адресные пространства других процессов.

  • Два механизма загрузки, первоначально предназначенные для других целей (менеджеры ввода и добавление скриптов), обычно используются для этой цели, но я бы не рекомендовал их.
  • mach_inject/mach_override - это набор библиотек с открытым исходным кодом для загрузки кода и замены реализации функций соответственно; однако вы несете ответственность за создание собственного приложения, которое использует библиотеки. (Кроме того, посмотрите этот ответ, вам нужны специальные разрешения для ввода кода в другие процессы.)

Пожалуйста, имейте в виду, что приложение для исправления/ввода кода для целей не отладки настоятельно запрещено Apple, и некоторые пользователи Mac (и разработчики) крайне критично относятся к этой практике. Большая часть этой критики плохо информирована, но было множество законно плохо написанных "плагинов" (особенно те, которые исправляют Safari), которые были замешаны в сбоях и проблемах приложений. Код защищен.

(Отказ от ответственности: Я являюсь автором (бесплатного) модуля APE и приложения, которое использует mach_inject.)