1

我有一个使用 Apple 样板代码加载 CFPlugin 的应用程序,这不是问题。

该插件有一个错误 - 它是其他人的二进制文件......

该插件对 Apple 系统框架进行了一些调用。如果我可以拦截插件想要对框架进行的调用,那么一切都会好起来的。我什至不需要调用“真实”版本。本质上我想调用我的版本而不是苹果的基于 CF 的例程。

拦截对框架调用的调用在我的应用程序的代码中有效,但插件仍然调用“真实”框架调用而不是我的拦截。

我不是真正的 dyld 专家,但似乎该插件虽然在我的应用程序的地址空间中,但以某种方式加载了它自己的 Apple 框架版本?

在加载插件等时我可以做一些魔术来让它调用我的拦截代码吗?

4

1 回答 1

0

1)按照Amit的书中所述,将DYLD插入单独的libFix.dylib:http ://osxbook.com(涉及__interpose DATA部分)

2)在启动您的应用程序之前使用 DYLD_INSERT_LIBRARIES=/path/to/libFix.dylib

这家伙的评论也可能有帮助: http: //www.mikeash.com/pyblog/friday-qa-2009-01-30-code-injection.html#comment-3fb6e4b8cf65ec984e7836e2b86a2875

于 2012-05-15T08:56:32.833 回答