mips体系堆栈回溯分析与实现

  在上家公司做 linux 驱动开发主要基于mips架构,在内核下有一个好玩的函数 dump_stack, 只要调用到这个函数就能把函数的调用栈给打印出来,十分方便,不再需要kgdb断点了。
  现在做电视机顶盒开发,各种软硬件平台 arm mips linux ecos 都有,有时候想要获得一个函数从哪里调用来的单凭静态分析根本不行,如果动态运行那就要在每个调用前面加入打印,修改量巨大而且容易出错。于是仿照 linux 内核代码 arch/mips/oprofile/backtrace.c 实现了mips架构下的栈回溯功能。

mips栈帧原理
  Call stack 是指存放某个程序的正在运行的函数的信息的栈。Call stack 由 stack frames 组成,每个 stack frame 对应于一个未完成运行的函数。
  在当今流行的计算机体系架构中,大部分计算机的参数传递,局部变量的分配和释放都是通过操纵程序栈来实现的。栈用来传递函数参数,存储返回值信息,保存寄存器以供恢复调用前处理机状态。 关于栈可见以前的文章: cdecl、stdcall、fastcall函数调用约定区别
  每次调用一个函数,都要为该次调用的函数实例分配栈空间。为单个函数分配的那部分栈空间就叫做 stack frame,也就是说,stack frame 这个说法主要是为了描述函数调用关系的。

Stack frame 具体从2点来阐述
  第一,它使调用者和被调用者达

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值