4

クローズドソース ソフトウェアの欠陥を克服するために、いくつかの OS X システム コールを挿入する(元の関数の代わりに自分の関数を呼び出す)必要があります。

結果として得られるソリューションは 10.5 (Leopard) 以降で機能することが望ましいですが、議論が十分に強力であれば、10.6 (Snow Leopard) を要求できるかもしれません。

結果として得られるソリューションは実行可能ファイルであることが望ましいですが、私はスクリプトで解決するかもしれません。

結果として得られるソリューションは、ターゲット アプリケーションが実行された後でも介入(「ベクトルを盗む」)できることが望ましいですが、アプリケーションのロード中に自分自身を挿入する必要があるテクノロジに落ち着くことができます。

結果として得られるソリューションは C または C++ で開発されることが望ましいですが、Objective-C などで解決することもできます。

これまでのところ、次のことを試しました。

1) DTraceスクリプトは私に多くのことを教えてくれましたが、D 言語の制限(制限されたフロー制御など)により、結果がスクリプトになることは言うまでもなく、私がやっていることは大きな苦痛になります。これは、私が撮影しているものほど整然とした自己完結型ではありません。

2) DYLD_INSERT_LIBRARIES介入。これは多くの点で滑らかですが、おそらく名前空間の平坦化が原因で(これが何を意味するのかを深く理解するふりはしません)、より単純な実行可能ファイルに対してはうまく機能しますが、ビルドしてもターゲット アプリケーションがチョークします。実際には呼び出しを介在させない何もしないライブラリ。

私の最新のアイデアは、mach_star ( https://github.com/rentzsch/mach_star ) を試してみることですが、まずここでやめて、常に私よりも多くのことを知っている Stack Overflow コミュニティに尋ねます...

…次は mach_star 以外を見てみようかな。

4

1 に答える 1

3

あなたはmach_starを見て正しい選択をしたと思います。

ダーウィンリンクローダーがどのように機能するかなどを実際に知りたい場合は、DYLD挿入の問題にもっと時間をかけたいと思います。しかし、明らかにあなたは、詳細な学習経験ではなく、迅速な解決策を探しています。そして、プロジェクトにアクセスしなくても、誰もがあなたが抱えている問題を理解できるとは思えません。したがって、これはおそらく行き止まりです。その上、マッハのオーバーライドとインジェクションはとにかくもっと楽しいです。

マッハインジェクションの基本は実際にはそれほど難しいものではありませんが、正しく理解しなければならないことがたくさんあり、そのほとんどは十分に文書化されていません。システムで機能するものを取得する前に11の問題が発生し、次に試行する関数では機能せず、10.5または10.8では機能しません。そして…mach_starライブラリあなたのためにそれらすべてのものをまとめます。だから、使ってみませんか?

私はIntel以前からmach_starを使用していません。ただし、x86_64と10.7、Xcode 4などの変更により、まだ定期的に更新されているようです。

于 2012-07-17T20:54:32.367 に答える