Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android上将.so代码从ARM转换为x86_Android_Assembly_Android Ndk_X86_Arm - Fatal编程技术网

在Android上将.so代码从ARM转换为x86

在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 Android设备编译的NDK生成的.so文件转换为x86设备的.so文件

我可以使用.so文件并使用objdump来读取程序集,但objdump并没有将其转换为我可以重新编译的格式——因此将机器代码指令一个转换为一个似乎更容易


有什么想法吗?我希望将ARM库转换为x86,以便NDK的本机代码ARM应用程序在我的x86 Android VMWare上运行得更好。

您所说的是二进制翻译。您可以阅读有关他们基于x86的移动设备的信息


一般来说,这不是一件容易解决的事情。您可以尝试调整的引擎,该引擎将二进制文件转换为中间格式,然后从中生成本机代码,但如果您使用了Android emulator,您知道该解决方案的性能可能会很差。

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

  • 在Android makefile中添加APP_ABI:=armeabi armeabi-v7a x86并重建项目
  • 在命令提示下(如果未找到makefile),使用以下命令 ndk构建应用程序_ABI=“armeabi armeabi-v7a x86”
  • 为x86平台重新打包应用程序

  • 我认为这是不可行的(尽管有像Transmeta芯片这样的设计,所以…)。这不是一个真正的[琐碎的]“一对一”操作,因为许多方面都不同-尽管可能有高级transpiler(适用于机器代码?)工具,我不会花太多时间探索这条路线。你难道不能向发布ARM版本库的人询问x86版本吗?(我假设它是封闭源代码的,否则你可以自己构建它)实现这一点的一种方法是运行,然后在输出上使用x86编译器。这并不简单。这将生成比直接翻译更好的代码。首先,ARM有16个寄存器,因此您很难在x86上模拟它。反编译的输出将允许x86编译器智能地分配寄存器和帧变量。在堆栈溢出方面有很多类似的问题。如果代码大小很小,检查汇编程序和逆向工程也可以实现常规流程;代码在这里会有所帮助。