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