Это не должно быть так сложно, как можно подумать, если я правильно понял.В частности, я начну с 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?