【技术实现步骤摘要】
本专利技术实施例涉及调用栈解析技术,尤其涉及一种调用栈的解析处理方法及装置。
技术介绍
通常在对软件调试时,需要查看当前函数的调用栈,也就是一个体现函数调用关系的函数调用链,比如,函数fl调用函数f2,函数f2调用函数f3,则fl — f2 — f3就是一个调用栈。具体地,一个函数到另一个函数之间可能存在多种调用情况,例如,函数fl到函数f3的调用找可以是f I — f2 — f3,也可以是f I — f4 — f5 — f3,因此,当程序出现异常、检测到错误或被断点断住时,需要查看当前函数的当前调用栈。现有技术中,查看当前函数的调用栈的常用方式有X86调用栈解析方式,这种方式中,由硬件约定扩展基指针寄存器(Extended Base Pointer, EBP)与返回地址(ReturnAddress, RA)相邻存放,当前EBP指向的位置保存上一层的EBP信息,且当前EBP地址加4的位置保存上一层的RA,因此,如果得到当前EBP的值,便可查找到上一层的EBP,依此类推,最终获取所有RA,再从汇编指令中得到RA对应的函数信息,最后得到调用栈。专利技术人在实现本专利 ...
【技术保护点】
一种调用栈的解析处理方法,其特征在于,包括:在将栈的起始地址按预设字节数对齐后,按照所述预设字节数进行逐层搜索,若通过判断获知当前位置的搜索值是一个有效的返回地址值,则获取所述有效的返回地址值以及当前位置的栈指针;获取每一个有效的返回地址值的所属函数,扫描所述所属函数的汇编指令,获得所述返回地址值所在层的本层开栈大小以及在本层中的存储偏移,所述本层开栈大小为所述所属函数的入口到所述当前位置的开栈大小;根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接,获得至少一个候选调用栈;根据预设的筛选规则,在所述至少一个候选调用栈中筛选出目标调用栈。
【技术特征摘要】
1.一种调用栈的解析处理方法,其特征在于,包括 在将栈的起始地址按预设字节数对齐后,按照所述预设字节数进行逐层搜索,若通过判断获知当前位置的搜索值是一个有效的返回地址值,则获取所述有效的返回地址值以及当前位置的栈指针; 获取每一个有效的返回地址值的所属函数,扫描所述所属函数的汇编指令,获得所述返回地址值所在层的本层开栈大小以及在本层中的存储偏移,所述本层开栈大小为所述所属函数的入口到所述当前位置的开栈大小; 根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接,获得至少一个候选调用栈; 根据预设的筛选规则,在所述至少一个候选调用栈中筛选出目标调用栈。2.根据权利要求1所述的方法,其特征在于,判断当前位置的搜索值是否是一个有效的返回地址值的步骤包括 对每一个预设字节数的栈值依次进行是否位于代码段、是否位于函数体、是否满足指令对齐要求、是否临近区域存在函数调用指令的判断,若均满足,则获知当前位置的搜索值是一个有效的返回地址值。3.根据权利要求1所述的方法,其特征在于,所述根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接包括 若任意两个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,满足连接规贝U,则将两个有效的返回地址值进行串接; 所述连接规则包括但不限于若Sp1-OFFsETJSIZEi=Spk-OFFSETk ;或,SpdoFFSETJSIZEi=Spk,则RAk的所属函数为RAi的所属函数的父函数; 其中,任意两个有效的返回地址值分别记为RAi和RAk,且i〈k ;RA,和RAk的栈指针分别为SPi和SPk,存储偏移分别为OFFSETi和OFFSETk,对应的本层开栈大小为SIZEi和SIZEk。4.根据权利要求1或2或3所述的方法,其特征在于,所述预设的筛选规则包括 排除孤立的有效的返回地址值; 最后一个有效的返回地址值的所属函数为相同的入口函数的多个候选调用栈中,排除包括结点数量少的候选调用栈; 排除最后一个有效的返回地址值的所属函数不为入口函数的候选调用栈。5.一种调用...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。