3

まず、私がやりたいことは、iOS アプリケーションの任意の標準 C 関数 (fopen、read、write、malloc など) をインターセプトすることです。

私はこのコードで libtest.dylib を持っています:

typedef struct interpose_s {
    void *new_func;
    void *orig_func;
} interpose_t;


FILE *vg_fopen(const char * __restrict, const char * __restrict);

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

FILE *vg_fopen(const char * __restrict path, const char * __restrict mode) {
    printf("vg_fopen");
    return fopen(path, mode);
}

dylib をコンパイルした後、ホスト iOS アプリのバイナリに移動し、LC_LOAD_DYLIB を LC_LOAD_COMMANDS リストの最後に追加して、@executable_path/libtest.dylib をポイントします。

私が期待しているのは、fopen の実装をオーバーライドし、fopen が呼び出されるたびに「vg_fopen」を出力することです。しかし、私はそれを取得していないので、介在は失敗した可能性があります.

何が原因なのか知りたいです。これは学習目的のみの社内開発のため、影響について言及したり、不適切な使用について警告したりしないでください。

前もって感謝します。

4

1 に答える 1