【发布时间】:2013-09-07 07:36:37
【问题描述】:
我正在尝试将 NDK 生成的已为 ARM Android 设备编译的 .so 文件转换为 x86 设备的 .so 文件。
我可以获取 .so 文件并使用 objdump 来读取程序集,但 objdump 并没有真正将其转换为我可以重新编译它的格式——所以将机器代码指令转换为一个似乎更容易——一对一。
有什么想法吗?我希望将 ARM 库转换为 x86,以便来自 NDK 的本机代码 ARM 应用程序在我的 x86 Android VMWare 上运行得更好。
【问题讨论】:
-
我不认为这是可行的(尽管已经有像 Transmeta 芯片这样的设计,所以..)。这不是一个真正的[微不足道的]“一对一”操作,因为许多方面都不同 - 尽管可能有高级转译器(适用于机器代码?)工具,但我不会花太多时间探索这条路线。
-
你不能问发布ARM版本库的人要x86版本吗? (我假设它是封闭源代码,否则你可以自己构建它)
-
一种方法是运行decompiler,然后在输出上使用x86 编译器。这并不简单。这将生成比直接翻译更好的代码。首先,ARM 有 16 个寄存器,因此您很难在 x86 上模拟它。 decompiled 输出将允许 x86 编译器智能地分配寄存器与帧变量。 Stack Overflow上有很多这样的问题。如果代码量很小,也可以检查 assembler 并对例程流程进行逆向工程; decompiling 代码将在这里提供帮助。
标签: android assembly android-ndk x86 arm