在Windows上有一些库,让你通话拦截到的DLL:是否可以在Mac OS上挂接API调用?
http://www.codeproject.com/kb/system/hooksys.aspx
是否有可能做到这一点在Mac OS?如果是这样,它是如何完成的?
在Windows上有一些库,让你通话拦截到的DLL:是否可以在Mac OS上挂接API调用?
http://www.codeproject.com/kb/system/hooksys.aspx
是否有可能做到这一点在Mac OS?如果是这样,它是如何完成的?
答案取决于您是要在自己的应用程序还是系统范围内执行此操作。在你自己的应用程序中,它非常简单;动态链接器提供了诸如DYLD_INSERT_LIBRARIES
之类的功能。如果您为了调试/检测目的而执行此操作,请检查DTrace。
您可以使用方法混搭替换Objective-C方法实现,例如, JRSwizzle或Apple的method_exchangeImplementations
(10.5+)。
如果要在整个系统范围内修改库行为,则需要加载到其他进程的地址空间。最初设计用于其他用途(input managers和scripting additions)
mach_inject/mach_override
是分别用于加载代码和替换函数实现的开源库集合;但是,您有责任编写使用这些库的自己的应用程序。 (此外,看一看this answer;您需要特殊权限代码注入到其他进程。)请记住,应用程序打补丁/代码注入非调试的目的强烈地受到苹果和某些Mac气馁用户(和开发人员)对这种做法极为关键。大部分这种批评都是知之甚少的,但是有一些合法的写得很差的“插件”(尤其是那些修补了Safari的插件),这些插件与应用程序崩溃和问题有牵连。代码防守。
(声明:我是一个(免费)APE模块的作者和它使用mach_inject
的应用程序)
链接是死有什么更新?我正在谈论SDK – 2013-05-21 00:34:11
APE现在基本上不受支持,而且几个操作系统版本还没有正式发布 - 你最好的选择是mach_inject。 – 2013-05-21 02:24:46
由于SIP,El Capitan及以上版本现在忽略'DYLD_INSERT_LIBRARIES'。 – Qix 2016-08-08 01:43:40