理解这部分ARM汇编代码

7
.syntax unified
.thumb

.cpu cortex-m4
.arch armv7e-m
.fpu fpv4-sp-d16

/* Changes from unprivileged to privileged mode. */
.thumb_func
.section    .kernel
.global     raise_privilege
.type       raise_privilege, %function
raise_privilege:
mrs     r0, control
bic     r0, r0, #1
msr     control, r0
dsb
isb
bx      lr

这是ARM汇编代码的一部分。我可以查阅芯片手册来了解指令的含义,但我不知道如何理解汇编指令如.thumb_func的行为。此外,我也不知道如何使用这部分代码,它看起来并不像常规函数。因此,我不知道如何“调用”它。


伪操作可能与确定代码的功能无关。请参阅控制寄存器,该寄存器不是ARM,而是cortex-M特定的。对于cortex-M来说,拇指互联可能并不太有用,unified也是如此。 - artless noise
2个回答

11
  • .开头的指令实际上是汇编指令。你可以在GAS: ARM机器指令中查找它们。
  • .syntax unified表示使用统一的ARM / Thumb汇编语法。该概念在这里这里有解释。
  • .thumb_func表示开始一个用于ARM-Thumb交互工作的Thumb模式函数。该概念在这里这里有解释。
  • raise_privilege对我来说看起来像一个void raise_privilege(void)叶子函数(即它不调用其他函数)在C中。使用以下方式调用它:
提升权限

0

GNU汇编器有点问题,有些笨拙,选择你的词...

在这种情况下,.thumb_func加上一个标签就足以调用该标签。thumb_func告诉汇编器以下标签是我可能想要调用或加载地址并使用bx的内容。

因此,在这段代码或其他代码中,你可以简单地

bl raise_priviliedge 

(如果BL可以到达和/或链接器添加跳板),或者您可以

ldr rX,=raise_priviledge  
blx rX 

其中 rX 是一些通用寄存器(例如 r3)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接