【发布时间】:2012-07-28 18:56:15
【问题描述】:
在 OS X Lion 下工作,我最近做了一些代码注入工作,以逐个进程地插入系统调用。
一路走来,我学到了很多东西,现在看来,至少出于研究目的,“简单地”插入对某些系统函数的所有调用会更有意义,例如如pwrite,如果这样的事情是可能的。
对于每个进程对某些系统调用(例如pwrite)的每个调用,是否可以调用我的代码而不是操作系统?
如果是这样,我能知道是哪个进程发出了调用吗?
编辑:为了避免有人因为我的问题的性质而认为我是恶意软件作者,我将解释为什么我现在在这里,问我在问什么:
我正在尝试让一个大型、复杂的闭源软件按应有的方式运行。为什么不等待供应商修复它?两年前,他们开始指责另一个派对,而那个派对则指指点点。这种情况是荒谬的,值得在没有任何一方帮助的情况下尝试克服,因为该软件被电影和视频制作人员使用,他们每小时收取数百美元的费用,因为他们的创意和技术先进的努力,不应该浪费他们的时间与他们的工具搏斗。
到目前为止,我努力的问题是我需要使用代码注入和插入来找到问题的根源(这就是我上面所说的“研究”)。一旦我找到问题的根源,解决方案也可能是注入和插入,或者替换动态库,或者一些晦涩的低级系统调优,或者谁知道呢?我正在分析的软件非常庞大,它又利用了其他框架、库和后台任务,其中一些是 OS X 的一部分,而其中一些是相关软件包的一部分。逐个组件的代码注入和插入变得有点疯狂,这就是为什么我想在系统调用结束时监视发生的事情,所以我可以看到,例如,所有pwrite 呼叫的来源以及呼叫的细节。
我希望这个澄清会有所帮助,并且有人可以为我指明正确的方向。谢谢!
【问题讨论】:
-
[已删除冗长的讨论]
-
响应您的编辑 - 这是一个公共论坛,您试图将熟练和有经验的开发人员拉入其中,就您承认两个供应商之间已经存在争议的主题提供建议。我不想去那里,SO 上的其他人也不应该去那里。
-
@MartinJames:可悲的是,虽然 Windows 很容易接受过滤器驱动堆栈(许多病毒扫描程序都使用),但 OS X 不支持这个概念.
标签: macos system-calls interposing library-interposition