强制arm-none-eabi-使用严格的add / sub立即编码?

时间:2017-02-24 10:02:02

标签: gcc assembly arm disassembly thumb

我正在编写一个工具来将ARM Thumb指令反汇编到ARM Thumb程序集中,可以使用库存汇编程序(plug)将其重组为原始二进制文件。 “股票装配商”部分似乎是一个棘手的问题。一条特别的指示给我带来了麻烦。

示例:

编码的拇指指令0x1f12使用subs r2, r2, #4和Capstone反汇编为arm-none-eabi-objdump -D。根据严格正确的this document(参见5.2格式2),立即值在第三个操作数字段内打包。

然而,当我用subs r2, r2, #4组装指令arm-none-eabi-as时,使用.syntax unified指令(这允许指令上的一些标志在Thumb中没有任何意义,例如{在s的末尾{1}},我得到subs。这在功能上等同于上面的编码(参见5.3格式3),但它是不同的。

出于我的目的,这使事情变得非常复杂(例如0x3a04位于subs表中,该表被简单地解析为指令,并且以不同方式重新编码,这将是调试的噩梦)

问题:

当立即值在范围内时,有没有办法强制tbb使用格式2?实际上,如果我将arm-none-eabi-as个操作数中的任何一个更改为另一个寄存器,则指令将根据需要以格式2进行编码,这是唯一可行的方法。当源寄存器和目标寄存器相同时,无论立即值的大小如何,它都以格式3对其进行编码。

也欢迎替代方案,但我认为我的其他选择是定制(或编写)汇编程序,或者只是不拆解违规指令。

注意:

删除r2不会更改编码,只允许汇编.syntax unified而不是subs

0 个答案:

没有答案