相关疑难解决方法(0)

ARM:链接寄存器和帧指针

我试图理解链接寄存器和帧指针在ARM中是如何工作的.我去过几个网站,我想确认一下我的理解.

假设我有以下代码:

int foo(void)
{
    // ..
    bar();
    // (A)
    // ..
}

int bar(void)
{
    // (B)
    int b1;
    // ..
    // (C)
    baz();
    // (D)
}

int baz(void)
{
    // (E)
    int a;
    int b;
    // (F)
}
Run Code Online (Sandbox Code Playgroud)

我叫foo().将链接寄存器包含在点(A)的地址码和帧指针包含在代码点(B)的地址?在声明了所有本地人之后,堆栈指针可以是bar()内的任何位置吗?

[编辑]添加了另一个函数调用baz()

c arm

28
推荐指数
1
解决办法
5万
查看次数

armcc中.arm.extab条目的结构是什么?

我试图准确理解异常表 ( .arm.extab) 的工作原理。我知道这是依赖于编译器的,所以我将限制自己使用armcc(因为我使用的是Keil)。

表中的典型条目类似于: b0aa0380 2a002c00 01000000 00000000

据我了解,第一个字编码个性例程的指令,而第三个字是重R_ARM_PREL31定位到 catch 块的开头。

让我困惑的是第二个词——它似乎被分成了两条短裤,其中第二条距离投掷功能开始处有一段距离,但我不确定到底是什么(也不确定第一条短裤的作用)。

是否有任何地方记录了这些条目的结构?

我找到了 2 个相关文档,但据我所知,它们没有依赖于编译器的信息,因此它们还不够:

c++ arm keil armcc

6
推荐指数
1
解决办法
3995
查看次数

标签 统计

arm ×2

armcc ×1

c ×1

c++ ×1

keil ×1