在x86_64上组装ARM指令



我有一个文件foo。S,它包含ARM拇指指令,在Ubuntu 22.04 x86_64机器上。是否有可能将其转换为使用asbinutils的ARM对象文件,或者我需要创建一个交叉编译器工具链?我试着

$ as -mthumb foo.S -o foo.o

然而,我得到

as: unrecognized option '-mthumb'

尽管这是man as中列出的选项之一。

在Ubuntu 22.04 x86_64机器上组装针对T32指令集的.S文件的一个最小且确定的过程可能是为Arm -none-eabi安装最新的Arm工具链

如果您没有安装wget,只需执行:sudo apt-get install wget,或者使用WEB浏览器将arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz下载到您的主目录。

一旦完成:

cd ${HOME}
# Skip the wget command hereafter if arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz was already downloaded into your home directory.
wget "https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz?rev=95edb5e17b9d43f28c74ce824f9c6f10&hash=176C4D884DBABB657ADC2AC886C8C095409547C4" -O arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz
tar Jxf arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz

你现在可以使用下面的命令来组装你的程序:

${HOME}/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc -c -mthumb foo.S -o foo.o 

请注意,扩展名为. s的文件通常需要使用cpp (C预处理器)来处理,这就是为什么该命令使用arm-none-eabi-gcc而不是arm-none-eabi-as

run

sudo sh -c 'apt update;apt install binutils-arm-none-eabi;'

则可以用

编译代码
arm-none-eabi-as -mthumb foo.S -o foo.o

的例子:

$ echo nop > foo.S 
$ arm-none-eabi-as -mthumb foo.S -o foo.o
$ echo $?
0
$ file foo.o
foo.o: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), not stripped

  • 我从@Nate Eldredge和@old_timer的评论中收集到这个。

相关内容

  • 没有找到相关文章

最新更新