バイナリ アプリケーション (サード パーティ、クローズド ソース) に機能を挿入する最良の方法は何でしょうか。
ターゲット アプリケーションは OSX 上にあり、gcc 3+ を使用してコンパイルされているようです。バイナリに実装されている関数のリストを確認でき、リモートで呼び出したい特定の関数をデバッグして分離しました。
zoomByFactor(x,y)
具体的には、複雑な HIDevice から特定のデータを受信したときに、この関数を呼び出したいと思います (void と呼びましょう)。
バイナリ ファイル自体を簡単に変更したり、命令を挿入したりできます (つまり、パッチ適用は RAM だけで行う必要はありません)。
これを「うまく」行う方法として何をお勧めしますか?
編集:
私は確かにアプリケーション全体を必要としています。だから私はそれを捨ててライブラリを使うことはできません。(倫理的な説明が必要な人のために: これは、2006 年以来、会社の Web サイトが更新されていないプロプライエタリな CAD ソフトウェアです。データの移行が簡単にできない. この製品はこのままでも十分に私には合っているが、最近入手した新しい HID を使用したい. アプリケーションの内部を調べたので、かなりの自信があります.関連するデータを使用して正しい関数を呼び出して、適切に機能させることができます)。
これが私がこれまでに行ったことです。
このプロセスを通じて、アプリケーションの一部を既に変更しています。
xxd -g 0 バイナリ > バイナリ.hex 猫バイナリ.hex | awk '代用作業' > modified.hex xxd -r modified.hex > newbinary chmod 777 ニューバイナリ
バイナリはほぼ 100 メガバイトの大きさであるため、この種のフープをジャンプしています。
私が考えていることの要点は、メイン アプリケーション ループのどこかで jmp を実行し、スレッドを起動して、メイン関数に戻るということです。
さて、質問は次のとおりです。新しいコードをどこに挿入できますか? シンボル テーブルを変更する必要がありますか? または、dylib を自動的にロードして、通常ロードされている dylib への呼び出しをメイン関数に挿入するだけの「ハッキング」を行うにはどうすればよいですか?