У меня к вам три вопроса, все связанные с dyld :)
Я использовал эту справочную страницу dyld в качестве основы. Я скомпилировал следующий код и успешно запустил двоичный файл на своем взломанном устройстве.
#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 для этого. Однако каждый двоичный файл, который я пытаюсь выполнить после вставки моей библиотеки, падает и выдает ошибку шины! Я что-то забыл или это динамическая библиотека вызывает сбой?