【技术实现步骤摘要】
栈回溯方法、装置、设备、存储介质和程序产品
[0001]本申请涉及计算机
,尤其涉及一种栈回溯方法、装置、设备、存储介质和程序产品。
技术介绍
[0002]在嵌入式底层开发在软件开发、调试及测试过程中,经常会遇到因软件的设计缺陷而出现的各种宕机现象。对于嵌入式MCU软件系统的宕机问题,目前主要是根据CPU核心寄存器的内容,再结合反汇编代码,采用栈回溯的方式检索出函数之间的调用的层次关系,来排查和修复代码的设计缺陷。
[0003]目前,如何快速、准确地回溯函数的调用关系,已成为函待解决的技术问题。
技术实现思路
[0004]本申请提供一种栈回溯方法、装置、设备、存储介质和程序产品,提高栈回溯的效率和准确率。本申请的技术方案如下:
[0005]本申请实施例还提供一种栈回溯方法,包括:
[0006]从当前函数的当前执行指令地址对所述当前函数的指令文本进行指令回溯,查找所述指令文本中是否包含压栈指令;
[0007]若是,则将所述当前函数的当前执行指令地址回溯到所述压栈指令的地址,且从所述压栈指令中解析出压栈数量;
[0008]根据所述压栈数量,确定所述当前函数的上一级函数的返回地址。
[0009]可选地,所述从所述压栈指令中解析出压栈数量,包括:
[0010]根据所述压栈指令的语法规则,从压栈指令中解析出寄存器掩码;
[0011]根据所述寄存器掩码,确定对所述当前函数的栈帧的压栈数量。
[0012]可选地,所述根据所述寄存器掩码,确 ...
【技术保护点】
【技术特征摘要】
1.一种栈回溯方法,其特征在于,包括:从当前函数的当前执行指令地址对所述当前函数的指令文本进行指令回溯,查找所述指令文本中是否包含压栈指令;若是,则将所述当前函数的当前执行指令地址回溯到所述压栈指令的地址,且从所述压栈指令中解析出压栈数量;根据所述压栈数量,确定所述当前函数的上一级函数的返回地址。2.根据权利要求1所述的方法,其特征在于,所述从所述压栈指令中解析出压栈数量,包括:根据所述压栈指令的语法规则,从压栈指令中解析出寄存器掩码;根据所述寄存器掩码,确定对所述当前函数的栈帧的压栈数量。3.根据权利要求2所述的方法,其特征在于,所述根据所述寄存器掩码,确定对所述当前函数的栈帧的压栈数量,包括:将所述寄存器掩码从十六进制转换为二进制,得到二进制编码;根据二进制编码,确定所述当前函数的栈帧被压入的寄存器的数量;根据所述前函数的栈帧被压入的寄存器的数量和当前操作系统位数,计算所述当前函数的栈帧的压栈数量。4.根据权利要求1所述的方法,其特征在于,所述根据所述压栈数量,确定所述当前函数的上一级函数的返回地址,包括:对所述指令文本从所述当前执行指令地址至所述当前函数的开始执行指令地址进行遍历;若遍历到设定指令码,则根据所述设定指令码的数量和所述压栈数量,确定所述当前函数的上一级函数的返回地址;若未遍历到设定指令码,则根据所述压栈数量,确定所述当前函数的上一级函数的返回地址。5.根据权利要求4所述的方法,其特征在于,所述根据所述设定指令码的数量和所述压栈数量,确定所述当前函数的上一级函数的返回地址,包括:根据所述压栈数量和所述设定指令码的数量,确定所述栈顶指针位移相对值;根据所述栈顶指针位移相对值,对栈顶指针的位置进行更新,得到更新后的栈顶指针的位置;将所述更新后的栈顶指针的位置所指向的地址,作为所述当前函数的上一级函数的返回地址。6.根据权利要求4所述的方法,其特征在于,所述根据所述压栈数量,确定所述当前函数的上一级函数的返回地址,包括:根据所述压栈数量,对栈顶指针的位置进行更新,得到更新后的栈顶指针的位置;将所述更新后的栈顶指针的位置所指向的地址,作为所述当前函数的上一级函数的返回地址。7.一种栈回溯装置,其特征在于,包括:回溯模块,从当前函数的当前执行指令地址对所述当前函数的指令文本进行指令回溯,查找所述指令文本中是否包含压栈指令;
解析模块,若查找到指令文本中包含压栈指令,则用于将所述当前函数的当前执行指令地址回溯到所述压栈指令的地址,且从所述压栈指令中解析出压栈数量;确定模块,用于根据所述压栈数量,确定所述当前函数的上一级函数的返回地址。8.根据权利要求7所述的栈回...
【专利技术属性】
技术研发人员:安超,
申请(专利权)人:北京小米移动软件有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。