0

mach-oバイナリの関数の参照を、自分のdylibで定義されたカスタム関数に変更する必要があります。私が今行っているプロセスは、

  1. 古い関数への参照を新しい関数に置き換えます。例:sed_fopenの使用。_mopen

  2. MachOViewでmach-oバイナリを開いて、変更するエンティティのアドレスを見つけます。次に、16進エディターを使用してバイナリーの情報を手動で変更します。

このプロセスを自動化する方法はありますか。つまり、シンボルを読み取るプログラムを作成し、情報を動的にロードして、実行可能ファイルでそれらを変更する方法はありますか。私はでmach-oヘッダーファイルを見ていました/usr/include/mach-oが、この情報を取得するためにそれらを使用する方法が完全にはわかりません。同じことをするのに役立つCまたはPythonのライブラリが存在しますか?

4

2 に答える 2

2

興味深い質問です。静的ライブラリに似た何かをしようとしています。これが役立つかどうかを確認してください

于 2012-10-27T19:41:49.840 に答える
2

varrunr - DYLD の介入を使用して、すべてではないにしてもほとんどの機能を簡単に実現できます。独自のライブラリを作成し、介在関数を次のように宣言します。

// This is the expected interpose structure
typedef struct interpose_s {
    void *new_func;
    void *orig_func;
} interpose_t;

static const interpose_t interposing_functions[] \
    __attribute__ ((section("__DATA, __interpose"))) = {
        { (void *)my_open,  (void *) open  }
    };

..そして、あなたはあなたのオープンを実装するだけです。介在する関数では、オリジナルへのすべての参照が機能します - これはラッパーにとって理想的です。また、DYLD_INSERT_LIBRARIES (Linux の LD_PRELOAD と同じ原則) を使用して、dylib を強制的に挿入できます。

于 2012-09-27T00:11:22.963 に答える