【问题标题】:Instruction disassembler ARM. [ARM/Thumb mode]指令反汇编器 ARM。 [ARM/拇指模式]
【发布时间】:2014-07-29 14:00:16
【问题描述】:

想问一下,如何判断指令是在哪个ISA(ARM/Thumb/Thumb-2)编码的?

首先,我尝试按照instructions here(第 4.5.5 节)进行操作。

但是,当我使用readelf -s ./arm_binary,并且arm_binary 是在发布模式下构建时,二进制文件中似乎没有.symtab。无论如何,我不明白如何使用此命令来查找指令的类型。

其次,我知道另一种区分方法是查看 ARM/Thumb 指令的 PC 地址。如果它是偶数,那么它是一个拇指指令,如果不是 - 然后是 ARM。但是如何在不将文件加载到内存的情况下做到这一点?当我解析文件的各个部分并找到执行部分时,我所拥有的只是文件中的开始(偏移)位置,并且文件偏移始终是偶数,并且总是偶数,因为我们有大小相等的指令到 2 或 4...

最后,最后的检查方法是检测BX Rm,从Rm中提取值,然后检查Rm中的那个地址是否为偶数。但是,这可能很困难,因为为此我需要模拟整个程序。

那么识别ISA进行反汇编的正确方法是什么?

感谢您的关注,希望您能帮助我。

【问题讨论】:

标签: arm disassembly


【解决方案1】:

如果不检查您描述的说明,我认为不可能在混合模式二进制文件中分辨出来。

如果整个文件将是一个 ISA 或另一个,那么您可以通过运行以下命令来确定入口点的 ISA:

readelf -h ./arm_binary

并检查入口点是偶数还是奇数。

但是,我要做的就是简单地从两个方向拆开它,然后看看什么是正确的。只要您在函数开头(或任何 4 字节边界)开始反汇编,就可以正常工作。大多数代码在错误的 ISA 中反汇编时会产生废话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-25
    • 2022-08-11
    • 2011-02-18
    • 2023-03-10
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多