2010-04-22 27 views

回答

22

答案取决于您是要在自己的应用程序还是系统范围内执行此操作。在你自己的应用程序中,它非常简单;动态链接器提供了诸如DYLD_INSERT_LIBRARIES之类的功能。如果您为了调试/检测目的而执行此操作,请检查DTrace。

您可以使用方法混搭替换Objective-C方法实现,例如, JRSwizzle或Apple的method_exchangeImplementations(10.5+)。

如果要在整个系统范围内修改库行为,则需要加载到其他进程的地址空间。最初设计用于其他用途(input managersscripting additions

  • 两个加载机制常被滥用的用于此目的,但我不会真的建议他们。
  • mach_inject/mach_override是分别用于加载代码和替换函数实现的开源库集合;但是,您有责任编写使用这些库的自己的应用程序。 (此外,看一看this answer;您需要特殊权限代码注入到其他进程。)

请记住,应用程序打补丁/代码注入非调试的目的强烈地受到苹果和某些Mac气馁用户(和开发人员)对这种做法极为关键。大部分这种批评都是知之甚少的,但是有一些合法的写得很差的“插件”(尤其是那些修补了Safari的插件),这些插件与应用程序崩溃和问题有牵连。代码防守。

(声明:我是一个(免费)APE模块的作者和它使用mach_inject的应用程序)

+0

链接是死有什么更新?我正在谈论SDK – 2013-05-21 00:34:11

+1

APE现在基本上不受支持,而且几个操作系统版本还没有正式发布 - 你最好的选择是mach_inject。 – 2013-05-21 02:24:46

+0

由于SIP,El Capitan及以上版本现在忽略'DYLD_INSERT_LIBRARIES'。 – Qix 2016-08-08 01:43:40

相关问题