OS X系统调用的插入

4
我需要插入一些OS X系统调用(让我的函数被调用而不是原始函数)来克服一个闭源软件中的缺陷。
最好的解决方案是适用于10.5(Leopard)及更新版本,但如果理由足够强烈,我可能需要10.6(Snow Leopard)。
最好的解决方案是一个可执行文件,但我可以接受一个脚本。
最好的解决方案能够在目标应用程序运行后进行插入("窃取向量"),但我可以接受在应用程序加载时注入自身的技术。
最好的解决方案是使用C或C++开发,但我可以接受Objective-C或其他语言。
到目前为止,我已经尝试过:
1)DTrace脚本,这让我学到了很多,但D语言的限制(有限的流程控制等)使得它对我正在做的事情来说非常麻烦,更不用说结果是一个脚本,不如我所期望的那样整洁和自包含。

2) DYLD_INSERT_LIBRARIES 插入库,这种方式在许多方面都很棒,但由于命名空间的平铺(我不会假装深入理解这意味着什么),它对简单的可执行文件起作用得很好,但即使我构建一个没有实际插入任何调用的无操作库,它也会使我的目标应用程序窒息。

我的最新想法是尝试使用mach_starhttps://github.com/rentzsch/mach_star),但我先在这里停下来,询问 Stack Overflow 社区,他们无疑比我知道更多......

......除了 mach_star,我还应该看其他什么东西吗?

1个回答

3

我认为你在关注mach_star是做出了正确的选择。

如果你真正想学习达尔文链接加载器的工作原理等内容,那么我建议你花更多时间解决你的DYLD插入问题。但显然,你是在寻找一个快速的解决方案,而不是深入学习的经验。我怀疑没有人能够在没有访问你的项目的情况下解决你所遇到的问题。因此,这可能是一个死胡同。除此之外,Mach覆盖和注入更有趣。

Mach注入的基础并不难,但有很多事情你必须做对,其中大部分都没有很好的文档记录。在你的系统上得到可以运行的代码之前,你会犯11个错误;在你尝试下一个函数时,它又不能工作了;然后在10.5或10.8上又无法工作... mach_star库为你包装了所有这些内容。那么,为什么不使用它呢?

我应该提醒一下,自从Intel前的日子以来,我就没有使用过mach_star。但看起来它仍在定期更新,针对x86_64、10.7和Xcode 4等进行了改进。


你说得对,我寻求的是解决方案而不仅仅是教育,尽管学习(通常)很有趣。 - bland328
我会尝试使用mach_star。很抱歉我还没有足够的声望来为您点赞! - bland328
好吧,正如我所说,与POSIX级别的链接装载程序相比,Mach注入更有趣(如果不太便携),而且mach_star是一个现成的可行代码源泉,因此即使您主要是在寻求教育,它仍然是一个很好的起点。 :) 无论如何,我认为您可能可以接受对您的问题的答案,即使您不能为其投票,这将提高您的统计数据以及我的统计数据,因此您可能希望这样做。(说实话,一旦我获得了足够的声望来启用编辑我的评论,我就不再关心获取更多声望...) - abarnert
我开始得很糟糕,甚至无法运行DisposeWindow+Beep示例。我想也许在Lion下使用Xcode 4.3.3进行64位构建对于当前的mach_star代码库来说有点太多了,或者只是对于像我这样的OS X开发新手来说。 - bland328
除了在GitHub上报告问题之外,我没有找到“mach_star community”。真是遗憾,因为 mach_star + Lion + Xcode 4.3.3 让我快要崩溃了;-)我真希望能让 DisposeWindow+Beep_Injector 演示工作起来!你有 inject_and_interpose 项目的经验吗? - bland328
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接