【问题标题】:arm vector table pointing one byte afterarm 向量表指向一个字节后
【发布时间】:2016-11-28 10:19:55
【问题描述】:

我有一个在我的 ARM Cortex M4 上编译和运行良好的小型应用程序。但是当我反汇编二进制文件时,我刷新,这是第一个字节的样子:

00000000 <.data>:
  0:   20020000        andcs   r0, r2, r0
  4:   080003b5        stmdaeq r0, {r0, r2, r4, r5, r7, r8, r9}
  8:   08000345        stmdaeq r0, {r0, r2, r6, r8, r9}
  c:   08000351        stmdaeq r0, {r0, r4, r6, r8, r9}

080003b5应该是Reset handler的地址(我那里有.word Reset_Handler),但是反汇编ELF显示Reset handler实际上位于080003b4,也就是前1个字节:

080003b4 <Reset_Handler>:
  80003b4:  2100        movs    r1, #0
  80003b6:  e003        b.n 80003c0 <InitData>

(它运行在THUMB模式,我有2字节指令)。

即使我反汇编二进制文件,它位于080003b4:

000003b4 <.data+0x3b4>:
  3b4:   2100            movs    r1, #0
  3b6:   e003            b.n     0x3c0

我的问题是,为什么它指向 1 个字节之后?这段代码出人意料地在实际板上工作。即使不反汇编,指令不应该按 2 个字节对齐吗?地址怎么可能是0x000003b5?

【问题讨论】:

标签: c++ assembly linker arm thumb


【解决方案1】:

答案:ARM 用它来切换到 THUMB 模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2018-11-22
    • 2013-07-26
    相关资源
    最近更新 更多