【问题标题】:How to separate ARM instructions and data during dis-assembly反汇编时如何分离ARM指令和数据
【发布时间】:2012-06-20 04:41:30
【问题描述】:

我正在编写/(使用 binutils)一段代码来手动反汇编 thumb2(16 位和 32 位)指令。 我在区分真正的 ARM 指令和 DATA 部分时遇到了问题。

最大的问题是指令不是字对齐的。 所以当我尝试读取 32 位指令时,很多时候它实际上与下一条指令重叠。

请帮忙。

谢谢, 主播

【问题讨论】:

    标签: arm thumb objdump


    【解决方案1】:

    arm 指令总是字对齐的。拇指总是对齐的。 thumb2 是可变字长。并且您不能以与固定字长相同的方式拆卸可变字长。要反汇编可变字长指令集,您不能简单地遍历对齐地址上的内存并反汇编。在某种形式下,您必须按执行顺序遍历数据以找到每条指令的起始地址,然后从该列表中反汇编。

    【讨论】:

      【解决方案2】:

      如果您还能够读取符号表,GCC 将留下符号 $a $t $d 指示您应该在哪个地址切换解释字节的方式:分别为 Arm、Thumb 和 Data。

      例如,这就是 objdump 知道显示文字池内容的方式,但不尝试将它们映射回指令,尽管 a .text 部分中的相邻函数之间存在..

      【讨论】:

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