【发布时间】:2012-07-16 15:11:46
【问题描述】:
我需要插入 (调用我的函数而不是原始函数)一些 OS X 系统调用来克服一个闭源软件中的缺陷。
最好,最终的解决方案可以在 10.5(豹)和更新版本下工作,但如果参数足够强,我可能能够要求 10.6(雪豹)。
生成的解决方案最好是可执行文件,但我可能会接受脚本。
最好,即使在目标应用程序运行之后,生成的解决方案也能够插入 ("steal the vectors"),但我可以满足于必须在应用程序运行时注入自身的技术正在加载。
最好用 C 或 C++ 开发最终的解决方案,但我可以满足于 Objective-C 或其他东西。
到目前为止,我已经尝试过:
1) DTrace 脚本,它教会了我很多,但 D 语言的局限性(有限的流控制等)我在做什么,更不用说结果将是一个脚本,它不像我正在拍摄的那样整洁和独立。
2) DYLD_INSERT_LIBRARIES 插入,这在很多方面都很巧妙,但可能是由于命名空间扁平化(我不会假装深入理解这意味着什么),它可以很好地处理更简单的可执行文件,但会使我的目标应用程序窒息,即使我构建了一个实际上不插入任何调用的无操作库。
我最近的想法是尝试使用 mach_star (https://github.com/rentzsch/mach_star),但我先在这里停下来,问问 Stack Overflow 社区,它总是比我知道的更多......
...接下来我应该看看除了 mach_star 之外的东西吗?
【问题讨论】:
标签: macos dtrace function-interposition interposing library-interposition