在安卓系统中,将ARM架构的.so代码转换成x86架构的代码。

5
我正在尝试将为ARM Android设备编译的NDK生成的.so文件转换为x86设备的.so文件。我可以取出.so文件并使用objdump读取汇编代码,但是objdump没有将其放入我可以重新编译的格式中,因此似乎更容易将机器码指令一对一地转换。有什么想法吗?我希望将ARM库转换为x86,以便NDK中的本机代码ARM应用在我的x86 Android VMWare上运行得更好。

我认为这不可行(虽然有像Transmeta芯片这样的设计,所以...)。这不是一个真正的“一对一”操作,因为许多方面都不同 - 虽然可能会有高级的转译器(适用于机器代码?)工具,但我不会花太多时间探索这条路。 - user2246674
1
你不能向发布 ARM 版本库的人请求一个 x86 版本吗?(我假设它是闭源的,否则你可以自己构建它) - Michael
一种方法是运行一个反编译器,然后在输出上使用 x86 编译器。这并不简单。这将生成比直接翻译更好的代码。首先,ARM 有16个寄存器,所以在 x86 上模拟它会有困难。反编译的输出将允许 x86 编译器智能地分配寄存器与框架变量。在 Stack Overflow 上有很多类似的问题。如果代码大小较小,则可以检查汇编程序并进行逆向工程来分析例程流程;在此处,反编译代码将有所帮助。 - artless noise
2个回答

2
你所说的是二进制翻译。你可以阅读英特尔针对其基于x86架构的移动设备提供的解决方案Intel's solution
通常情况下,这不是一件容易解决的事情。你可以尝试适应QEMU的引擎QEMU,该引擎将二进制文件转换为中间格式,然后从中生成本地代码,但如果你使用过Android模拟器,你会知道这种解决方案的性能可能很差。

1

您可以使用以下步骤重新编译:

  1. 在Android makefile中添加APP_ABI := armeabi armeabi-v7a x86并重新构建项目
  2. 如果未找到makefile,请在命令提示符中使用以下命令:ndk-build APP_ABI="armeabi armeabi-v7a x86"
  3. 再次为x86平台打包应用程序

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接