2

私が正しく理解していれば、これは人が考えるほど難しいことではないはずです。具体的には、iOS と ELF 実行形式から始めます。私はジェイルブレイクされた iPhone を持っており、どのアプリストア アプリでもこれを実行したくないことを明確にしましょう。そのため、「Apple によって禁止されているため実行できません」などの「適切なアドバイス」は避けてください。

それで、私が見たのは、Frash と呼ばれる Flash プレーヤーの実装があることです (最近のジェイルブレイクの開発者である Comex によるものです)。このユーティリティでは、インストール後に、Android の libflashplayer.so が iPhone ファイル システムに存在する (コピーされている) 必要があります。ソースコードを掘り下げたところ、微調整が実際に Android (ELF) 共有オブジェクト ファイルを開き、それを「解析」してそこからコードを実行することがわかりました。私はすでに友人に、それが実際に可能か不可能かを尋ねたところ、ARM 上の ELF と ARM 上の Mach-O はバイナリ互換であるため (両方とも ARM であるため)、可能であると彼は言いました。しかし、彼は実際に私にそれを詳細に説明することができなかったので、どうすればそれができるのか聞いてみたい. 処理するソース コードの断片を正確に理解することはできませんが、1 つ確かなことは次のとおりです。

int fd = open("libflashplayer.so", O_RDONLY);
_assert(fd > 0);

fds_init();

sandbox_me();

int symtab_size;
Elf32_Sym *symtab;
void **init_array;
Elf32_Word init_array_size;
char *strtab;
TIME(base_load_elf(fd, &symtab, &symtab_size, &init_array, &init_array_size, &strtab));

// Call the init funcs
_assert(init_array);
while(init_array_size >= 4) {
    void (*x)() = *init_array++;
    notice("Calling %p", x);
    x();
    init_array_size -= 4;
}

(GitHub の 2011 年 2 月 12 日時点の元のコードから)

彼はlibelfを使ってこれを実行しているように思えますよね?そして、ELF ファイルには、互換性のあるプロセッサで問題なく実行できるシンボルが含まれていますか?

また、他のすべてのプロセッサ アーキテクチャに当てはまるかどうかも知りたいですか? では、OS X で Linux バイナリからシンボルを実行できるのでしょうか?

4

1 に答える 1

5

互換性に関して重要なのは、基盤となるプロセッサ アーキテクチャであり、Linux 対 OS X 対 Android ではありません。ELF または .so が同じプロセッサ命令セット用にコンパイルされている場合、これは機能します。そうでない場合は、互換性がありません。たとえば、両方が Linux 用に構築されていて、プロセッサが異なる場合、互換性はありません。

于 2011-12-02T22:04:07.993 に答える