我需要介入(调用我的函数而不是原始函数)一些 OS X 系统调用是为了克服闭源软件中的缺陷。
最好,生成的解决方案可以在 10.5 (Leopard) 及更新版本下工作,但我might如果论证足够有力,可以要求 10.6(雪豹)。
最好,生成的解决方案是可执行文件,但我可能会选择脚本。
优选地,所得解决方案能够插入(“窃取向量”)即使在目标应用程序运行之后,我也可以接受一种必须在应用程序加载时注入自身的技术。
最好是用 C 或 C++ 开发最终的解决方案,但我可以选择 Objective-C 或其他语言。
到目前为止,我已经尝试过:
1) DTrace脚本,教会了我很多东西,但是D语言的局限性(限流控制等)这对我正在做的事情来说是一个很大的痛苦,更不用说结果将是一个剧本,它不像我拍摄的那样整洁和独立。
2) DYLD_INSERT_LIBRARIES插入,在很多方面都很灵活,但可能是由于命名空间扁平化(我不会假装很理解这意味着什么),它可以很好地处理更简单的可执行文件,但会使我的目标应用程序窒息,即使我构建了一个实际上不插入任何调用的无所事事的库。
我最新的想法是尝试马赫星 (https://github.com/rentzsch/mach_star),但我首先要停下来询问 Stack Overflow 社区,他们总是比我知道的更多......
...接下来我应该看看除了 mach_star 之外的东西吗?
我认为您在 mach_star 上做出了正确的选择。
如果您确实想了解 darwin 链接加载器的工作原理等,我会花更多时间研究您的 DYLD 插入问题。但显然您正在寻找快速解决方案,而不是深入的学习体验。我怀疑任何人都无法在无法访问您的项目的情况下解决您遇到的问题。所以,这很可能是一个死胡同。此外,马赫覆盖和注入无论如何都更有趣。
马赫注入的基础知识实际上并不难,但是有很多事情你必须做对,其中大多数都没有很好的文档记录。在你得到可以在你的系统上运行的东西之前,你会犯 11 个问题,然后它就无法在你尝试的下一个函数中运行,然后它就无法在 10.5 或 10.8 上运行,并且...... mach_star 库为你包装了所有这些东西。那么,为什么不使用它呢?
我应该提到的是,自从英特尔出现之前我就没有使用过 mach_star。但看起来它仍在定期更新,包括 x86_64 和 10.7 以及 Xcode 4 等的更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)