5

共有オブジェクト ファイル (.so) とその中の関数を受け取りましたが、その使用方法や、iOS アプリケーションで使用するために変更する方法についての手がかりがありません。誰かが私を正しい方向に向けることができますか?

.so が Android アプリケーションに由来することは知っていますが、iOS アプリケーションでも動作させることができると言われました。

4

2 に答える 2

9

実際にも技術的にも、はい、できますが、考えられる方法ではありません。

Android からのものである場合は、おそらく ARM 用にコンパイルされています。そのため、iOS デバイスの ARM CPU とバイナリ互換性があるはずです。ただし、iOS は共有オブジェクトの通常の形式 (ELF 形式) を使用せず、iOS および OS X 独自の Mach-O 形式を使用します。

dlopen()これは、この共有オブジェクト ファイルに直接リンクすることも、およびに直接渡すこともできないことを意味しますdlsym()。本格的なハッキングに取り掛かる必要があります (おそらく知らないことです)。これには、ファイルの適切なロードと再配置が含まれます。

この例は、iOS ジェイルブレイク デベロッパーおよびハッカーであるComex の GitHub リポジトリ Frashで見つけることができます。これは、ジェイルブレイクされた iOS デバイス用の Flash プレーヤーです。基本的に、Comex は iOS 用の ELF ローダー モジュール (「フード」と呼ばれる) を作成し、それを使用して Android の libflashplayer.so を iOS で動作させました。かなりきれいですね。

また、OS の動的な読み込みとさまざまな変更が必要なため、これは AppStore アプリでは不可能であることに注意してください。

于 2012-11-28T23:09:35.123 に答える
4

技術的には可能ですが(h2co3の回答を参照)、実用的なものについては答えはノーです

  • そのため、ファイルは正しいバイナリ形式ではありません
  • あったとしても、アプリストアでは動的読み込みは許可されていません
于 2012-11-28T23:49:09.773 に答える