将ARM汇编交叉编译为x86

3

我有一个ARM汇编文件(test.s),在一台Linux x86电脑上。

我想在Linux系统上编译和运行这个文件,但不确定如何操作。

需要使用clang吗?如果是的话,命令是什么?


1
汇编文件有多大?是手写的还是生成的?如果是生成的,你不能要求最初生成它的人为Intel x86生成一个等效的吗?ARM和x86之间的指令集非常不同。如果是手写的,你可能需要重写它,因为如上所述。 - Seva Alekseyev
@SevaAlekseyev 所涉及的文件是手写的,而且不是很大。我正在尝试找到一种可重复使用于将来更大文件的解决方案。 - Luke Willis
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
7

很不可能clang会对你有任何帮助。毕竟,clang是一个C/C++编译器。

你需要的是一个汇编翻译器。这样的工具确实存在,但在开源项目中,质量参差不齐,所以你应该自己去谷歌一下,看看情况如何。

LLVM(clang下面的机器抽象库)曾经被用来做这样的事情。使用LLVM与使用其他汇编翻译器没有什么不同:首先将你的ARM汇编映射到LLVM汇编,然后可以将LLVM汇编编译成其他形式。

这里有一个相关项目的例子:http://infoscience.epfl.ch/record/149975/files/x86-llvm-translator-chipounov_2.pdf。这个团队使用了一个特殊修补过的QEMU来为他们生成中间的LLVM代码。

在大多数这种情况下,最简单(也更安全)的方法是手动重写汇编,可能转换成更高级的语言。

如果涉及的汇编文件是一个独立的程序,你可能根本不需要进行翻译。只需尝试使用QEMU(http://www.qemu.org)。


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