因为项⽬的⼀些需求,需要查看⼀些汇编指令对应的机器码是什么,也需要查看⼀些机器码对应的汇编指令是啥,经过⽹上查的⼀些资料,到了⼀个⽐较轻量、⽅便、快捷的⽅法。 ⾸先第⼀步需要配置arm-linux-gcc交叉编译环境;第⼆步将需要转换的机器码或者汇编指令写到⼀个.s⽂件中;第三步使⽤as和objdump命令进⾏编译和反汇编;最后你就得到了你要的结果。 立方氮化硼砂轮1. 配置arm-linux-gcc环境
sudo apt-get install gcc-arm-linux-gnueabi //安装手机绑定
毛巾挂件arm-linux-gnueabi-gcc -v //检查是否安装成功
2. 写⼀个.s⽂件,如下的test.s
可以使⽤正确的汇编指令,也可以使⽤伪指令的形式。
以下第⼀句是将0x100A700这个值放到pc中;第⼆句将⽴即数0放到寄存器R0中;第三句相当于RET。祛斑净
如果是将机器码转换为汇编指令,⽂件中的机器码前要加.inst,并且如果是⼩端的机器码的话,需要将
陶瓷球其转换为⼤端的形式,因为实验表明gcc可能是⼤端的。
3. 使⽤as和objdump进⾏编译和反汇编
as编译⽣成⽬标⽂件test.o,再将test.o反汇编输出如下。
左右对照机器码和汇编指令,注意这⾥的机器码是⼤端形式,汇编指令是正确的,not伪指令了。
第⼀句伪指令变成了两句汇编指令,数据部分放在了最后,然后将该数据对应的地址赋给pc。
第⼆句汇编指令对应的机器码就是e3a00000(⼤端),0000a0e3(⼩端)。
第四句的机器码对应的汇编指令就是 ldr pc,[pc,#-4]。
附加⼀些在线转换⼯具:
Online Assembler and Disassembler【多种架构】:
Online x86 / x64 Assembler and Disassembler【仅x86/x64】:连续退火炉
Online ARM to HEX Converter【ARM,部分指令,仅可单向转换】: