在Android上将.so代码从ARM转换为x86
我正在尝试将为ARM Android设备编译的NDK生成的.so文件转换为x86设备的.so文件 我可以使用.so文件并使用objdump来读取程序集,但objdump并没有将其转换为我可以重新编译的格式——因此将机器代码指令一个转换为一个似乎更容易在Android上将.so代码从ARM转换为x86,android,assembly,android-ndk,x86,arm,Android,Assembly,Android Ndk,X86,Arm,我正在尝试将为ARM Android设备编译的NDK生成的.so文件转换为x86设备的.so文件 我可以使用.so文件并使用objdump来读取程序集,但objdump并没有将其转换为我可以重新编译的格式——因此将机器代码指令一个转换为一个似乎更容易 有什么想法吗?我希望将ARM库转换为x86,以便NDK的本机代码ARM应用程序在我的x86 Android VMWare上运行得更好。您所说的是二进制翻译。您可以阅读有关他们基于x86的移动设备的信息 一般来说,这不是一件容易解决的事情。您可以尝试
有什么想法吗?我希望将ARM库转换为x86,以便NDK的本机代码ARM应用程序在我的x86 Android VMWare上运行得更好。您所说的是二进制翻译。您可以阅读有关他们基于x86的移动设备的信息
一般来说,这不是一件容易解决的事情。您可以尝试调整的引擎,该引擎将二进制文件转换为中间格式,然后从中生成本机代码,但如果您使用了Android emulator,您知道该解决方案的性能可能会很差。您可能可以使用以下步骤重新编译
我认为这是不可行的(尽管有像Transmeta芯片这样的设计,所以…)。这不是一个真正的[琐碎的]“一对一”操作,因为许多方面都不同-尽管可能有高级transpiler(适用于机器代码?)工具,我不会花太多时间探索这条路线。你难道不能向发布ARM版本库的人询问x86版本吗?(我假设它是封闭源代码的,否则你可以自己构建它)实现这一点的一种方法是运行,然后在输出上使用x86编译器。这并不简单。这将生成比直接翻译更好的代码。首先,ARM有16个寄存器,因此您很难在x86上模拟它。反编译的输出将允许x86编译器智能地分配寄存器和帧变量。在堆栈溢出方面有很多类似的问题。如果代码大小很小,检查汇编程序和逆向工程也可以实现常规流程;代码在这里会有所帮助。