Запуск исполняемых файлов разного формата на любой ОС - PullRequest
2 голосов
/ 03 декабря 2011

Это не должно быть так сложно, как можно подумать, если я правильно понял.В частности, я начну с iOS и исполняемого формата ELF.Давайте уточним, что у меня джейлбрейкнутый iPhone, и я не хочу делать это ни в каких приложениях магазина приложений, поэтому просьбы избегать «хороших советов», таких как «вы не можете сделать это, так как это запрещено Apple».

Итак, что я видел, так это то, что есть реализация Flash Player, называемая Frash (от Comex btw, разработчика последних джейлбрейков).После установки этой утилите требуется, чтобы файл libflashplayer.so для Android присутствовал (копировался) в файловую систему iPhone.Я покопался в исходном коде и обнаружил, что твик фактически открывает общий объектный файл Android (ELF), «разбирает» его и выполняет код из него. Я уже спросил другаНа мой взгляд, возможно или нет на самом деле, и он сказал мне, что это так, потому что ELF на ARM и Mach-O на ARM совместимы в двоичном формате (потому что они оба ARM).Но на самом деле он не смог объяснить мне это подробно, поэтому я хотел бы спросить, как это можно сделать?Я не могу точно понять фрагмент исходного кода, который обрабатывает, но одна вещь уверена:

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;
}

(из исходного кода, по состоянию на 12.02.2011 на GitHub)

Мне кажется, что он использует libelf для этого, верно?И что в файле ELF есть символы, которые можно прекрасно выполнить на совместимом процессоре?

Я также хотел бы знать, верно ли это для всех других архитектур процессоров?Так, может быть, можно выполнить символы из двоичных файлов Linux на OS X?

1 Ответ

5 голосов
/ 03 декабря 2011

Важной особенностью совместимости является лежащая в основе архитектура процессора, а не Linux против OS X и Android. Если ELF или .so скомпилированы для одного и того же набора инструкций процессора, это может работать. Если нет, то они не совместимы. Например, если бы оба были созданы для Linux, но с разными процессорами, они были бы несовместимы.

...