打印
[其他]

ARM backtrace 实战分析

[复制链接]
826|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2023-8-24 08:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
前言
嵌入式开发中,如果发生异常如内存访问越界等情况,有时会非常难debug到底是哪里出错,近来看了一下back trace回溯的功能及实现,在这里做个笔记。

backtrace就是回溯堆栈,简单的说就是可以列出当前函数调用关系。在理解backtrace之前我们需要理解一下函数执行过程的中的压栈过程。

ARM微处理器共有37个寄存器,其中31个为通用寄存器,6个为状态寄存器。但是往往这些寄存器都不能同时被访问,需要在特定的模式下访问特定的指令。

但在任何时候,通用寄存器R0~R15、一个或两个状态寄存器都是可访问的。有三个特殊的通用寄存器:R13:在ARM指令中常用作堆栈指针SPR14:也称作子程序连接寄存器(Subroutine Link Register)即连接寄存器LRR15:也称作程序计数器PC。


依次为当前函数指针PC、返回指针LR、栈指针SP、栈基址FP、传入参数个数及指针、本地变量和临时变量。如果函数准备调用另一个函数,跳转之前临时变量区先要保存另一个函数的参数。

PC寄存器和LR寄存器均指向代码段,PC表示当前的代码指向到何处,LR表示当前函数返回后要到哪里去继续执行。
SP和FP用于维护函数的栈空间,其中SP指向栈顶,FP指向上一个函数栈帧的栈顶。

==================================================================================================================================================================================================================

实战

先拿出HardFault机器对应的MAP文件
找到r01对应地址的函数
r06对应函数
lr对应地址函数
pc对应地址函数
分析流程为lr对应地址函数调用pc地址函数发生错误

后续需要分析代码进行具体原因判断
————————————————
版权声明:本文为CSDN博主「墨染 锦年」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44710568/article/details/127488559

使用特权

评论回复
沙发
liuzaiy| | 2023-8-26 23:47 | 只看该作者
就一个前言,就没了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2028

主题

15903

帖子

13

粉丝