私はあなたに3つの質問があります、すべてdyldに関連しています:)
私はこのdyldmanページをベースとして使用しています。次のコードをコンパイルし、ジェイルブレイクされたデバイスでバイナリを正常に実行しました。
#include <stdio.h>
#include <mach-o/dyld.h>
int main(int argc, const char* argv[]) {
uint32_t image_count, i;
image_count = _dyld_image_count();
for (i = 0; i < image_count; i++) {
printf("%s\n", _dyld_get_image_name(i));
}
return 0;
}
これらの関数を使用すると、プログラムのアドレス空間にロードされているすべての共有ライブラリを見つけることができると思いました。私のMacでは、出力は非常に単純です。現在メモリにロードされているすべてのライブラリへのパスが表示されます。私のiPhoneでは、出力はほぼ同じです-ファイルパスも取得します-しかし、指定された場所にファイルがありません。(一方、私のMacでは、ファイルを見つけることができます!)
これは出力からのサンプル行です:/usr/lib/system/libdyld.dylib
ls、iFile、および私が使用した他のすべてのツールによると、このディレクトリ(/ usr / lib / system /)は空です。なんで?それらのファイルはどこにありますか?
私が知りたいもう一つのことは:メモリ内のライブラリを見つけることは可能ですか?ライブラリがメモリにマップされるオフセットからオフセットまで?私は最初を見つける方法を知っていると思いますが、ライブラリの終わりを見つける方法がわかりません。始まりを見つけるために、私は_dyld_get_image_headerによって返されたアドレスを使用します-それは正しいですか?
最後の質問:システム全体に動的ライブラリをロードしたかったので、DYLD_INSERT_LIBRARIESを使用してそれを実行できると思いました。ただし、libを挿入した後に実行しようとするすべてのバイナリがクラッシュし、バスエラーが発生します。何かを忘れましたか、それともクラッシュの原因となるダイナミックライブラリですか?