Можно ли перехватывать вызовы API в Mac OS? - PullRequest
16 голосов
/ 22 апреля 2010

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

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

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

1 Ответ

23 голосов
/ 23 апреля 2010

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...