iphone - 在任何操作系统上运行不同格式的可执行文件

标签 iphone c arm executable abi

如果我没猜错的话,这应该不会像人们想象的那么难。具体来说,我将从 iOS 和 ELF 可执行格式开始。让我们澄清一下,我有一部越狱的 iPhone,我不想在任何应用商店应用程序中执行此操作,因此请避免使用“好建议”,例如“你不能这样做,因为 Apple 禁止这样做”。

所以,我看到的是有一个名为 Frash 的 Flash 播放器实现(由 Comex 顺便说一句,最近越狱的开发者)。安装后,此实用程序要求 iPhone 文件系统中存在(复制到)Android 的 libflashplayer.so。我深入研究了源代码,发现该调整实际上打开了 Android (ELF) 共享对象文件,“解析”它并从中执行代码。我已经问过了我的一个 friend 无论实际上是否可能,他告诉我是的,因为 ARM 上的 ELF 和 ARM 上的 Mach-O 是二进制兼容的(因为它们都是 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;
}

(来自 GitHub 上截至 2011 年 2 月 12 日的原始代码)

在我看来,他是利用诽谤来做到这一点,对吗? ELF 文件中的符号可以在兼容的处理器上正常执行吗?

我还想知道这是否适用于所有其他处理器架构?那么也许可以在 OS X 上执行 Linux 二进制文件中的符号?

最佳答案

兼容性最重要的是底层处理器架构,而不是 Linux、OS X 和 Android。如果 ELF 或 .so 是针对相同的处理器指令集编译的,那么这可以工作。如果不是,那么它们不兼容。例如,如果两者都是为 Linux 构建的但处理器不同,则它们将不兼容。

关于iphone - 在任何操作系统上运行不同格式的可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8363031/

相关文章:

iphone - 有没有办法让 NSManagedObjectContext 不必每次都调用我的 AppDelegate?

c - 如何用C语言构造ARP请求包

azure - 如何解决 ARM 模板中的 'resource is not defined in the template.' 错误?

arm - 使用 GDB 在 Cortex-M 上进行软重置

c - C 中的数组 asm 函数

iphone - 如何使视频资源与视网膜显示兼容?

ios - 自调整单元格不适用于图像

c - 为什么这个 C 程序会导致段错误(核心转储)?

iphone - 基于服务器的数据库

c - 为什么 volatile 适用于 setjmp/longjmp