You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RASM2无法重新汇编自身反汇编的ARM代码?原因与解决方案

ARM汇编转机器码失败的原因与解决办法

问题重现

在Linux环境下执行反汇编命令:

rasm2 -a arm -b 16 -d "28 46 0d f2 74 4d f0 bd"

得到反汇编结果:

mov r0, r5
addw sp, sp, 0x474
pop {r4, r5, r6, r7, pc}

但尝试将上述汇编代码重新转换为机器码时执行命令:

rasm2 -a arm -b 16 "mov r0, r5;addw sp, sp, 0x474;pop {r4, r5, r6, r7, pc};"

出现报错:

Cannot assemble 'addw sp, sp, 0x474' at line 8
invalid

错误原因

  1. 指令语法兼容性问题:rasm2的ARM汇编器对Thumb-2指令的语法支持与反汇编输出不一致。反汇编得到的addw是Thumb-2的32位扩展指令,但rasm2汇编时不识别addw助记符,该指令对应的标准Thumb-2 32位加法助记符应为add.w。
  2. 模式匹配问题:-b 16指定了Thumb模式,但addw属于32位Thumb-2指令,rasm2需要显式的32位Thumb-2语法格式才能正确识别指令。

解决办法

方法1:修改助记符后使用rasm2

将addw替换为add.w,执行以下命令即可成功汇编:

rasm2 -a arm -b 16 "mov r0, r5;add.w sp, sp, 0x474;pop {r4, r5, r6, r7, pc};"

执行后会输出正确的十六进制机器码:28460df2744df0bd。

方法2:使用GNU ARM汇编器(arm-none-eabi-as)

如果rasm2仍有兼容性问题,可以使用标准的GNU ARM工具链:

  1. 创建汇编文件test.s,内容如下:
.syntax unified
.thumb
mov r0, r5
add.w sp, sp, #0x474
pop {r4, r5, r6, r7, pc}
  1. 执行汇编命令:
arm-none-eabi-as -mthumb test.s -o test.o
  1. 提取机器码:
arm-none-eabi-objcopy -O binary test.o test.bin
xxd -p test.bin

输出结果同样为28460df2744df0bd。

内容的提问来源于stack exchange,提问作者rabbit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:30:53