调用栈的解析处理方法及装置的制作方法

文档序号:6382857阅读:153来源:国知局
专利名称:调用栈的解析处理方法及装置的制作方法
技术领域
本发明实施例涉及调用栈解析技术,尤其涉及一种调用栈的解析处理方法及装置。
背景技术
通常在对软件调试时,需要查看当前函数的调用栈,也就是一个体现函数调用关系的函数调用链,比如,函数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对应的函数信息,最后得到调用栈。发明人在实现本发明实施例的过程中发现,采用现有技术中解析调用栈的方式,必须硬件或编译器支持,否则不可用;而且如果程序中的当前调用栈被破坏或者缺失寄存器现场,将无法得到调用栈。

发明内容
本发明实施例提供一种调用栈的解析处理方法及装置,用以解决当调用栈中缺失寄存器现场或被破坏时无法得到该调用栈的问题。本发明实施例第一方面提供一种调用栈的解析处理方法,包括在将栈的起始地址按预设字节数对齐后,按照所述预设字节数进行逐层搜索,若通过判断获知当前位置的搜索值是一个有效的返回地址值,则获取所述有效的返回地址值以及当前位置的栈指针;获取每一个有效的返回地址值的所属函数,扫描所述所属函数的汇编指令,获得所述返回地址值所在层的本层开栈大小以及在本层中的存储偏移,所述本层开栈大小为所述所属函数的入口到所述当前位置的开栈大小;根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接,获得至少一个候选调用栈;根据预设的筛选规则,在所述至少一个候选调用栈中筛选出目标调用栈。结合第一方面的第一种实现方式中,判断当前位置的搜索值是否是一个有效的返回地址值的步骤包括对每一个预设字节数的栈值依次进行是否位于代码段、是否位于函数体、是否满足指令对齐要求、是否临近区域存在函数调用指令的判断,若均满足,则获知当前位置的搜索值是一个有效的返回地址值。结合第一方面的第二种实现方式中,所述根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接包括若任意两个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,满足连接规则,则将两个有效的返回地址值进行串接;所述连接规则包括但不限于若SP1-OFFSETJSIZEi = SPk-OFFSETk ;或,SpdoFFSETJSIZEi=Spk,则RAk的所属函数为RAi的所属函数的父函数;其中,任意两个有效的返回地址值分别记为RAi和RAk,且i〈k -M1和RAk的栈指针分别为SPi和SPk,存储偏移分别为OFFSETi和OFFSETk,对应的本层开栈大小为SIZEi和SUEk。 结合第一方面或第一方面的第一种实现方式或第一方面的第二种实现方式的第三种实现方式中,所述预设的筛选规则包括排除孤立的有效的返回地址值;最后一个有效的返回地址值的所属函数为相同的入口函数的多个候选调用栈中,排除包括结点数量少的候选调用栈;排除最后一个有效的返回地址值的所属函数不为入口函数的候选调用栈。本发明实施例第二方面提供一种调用栈的解析处理装置,包括第一获取模块,用于在将栈的起始地址按预设字节数对齐后,按照所述预设字节数进行逐层搜索,若通过判断获知当前位置的搜索值是一个有效的返回地址值,则获取所述有效的返回地址值以及当前位置的栈指针;第二获取模块,用于获取每一个有效的返回地址值的所属函数,扫描所述所属函数的汇编指令,获得所述返回地址值所在层的本层开栈大小以及在本层中的存储偏移;所述本层开栈大小为所述所属函数的入口到所述当前位置的开栈大小;串接模块,用于根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接,获得至少一个候选调用栈;筛选模块,用于根据预设的筛选规则,在所述至少一个候选调用栈中筛选出目标调用栈。结合第二方面的第一种实现方式中,所述第一获取模块判断当前位置的搜索值是否是一个有效的返回地址值具体包括对每一个预设字节数的栈值依次进行是否位于代码段、是否位于函数体、是否满足指令对齐要求、是否临近区域存在函数调用指令的判断,若均满足,则获知当前位置的搜索值是一个有效的返回地址值。结合第二方面的第二种实现方式中,所述串接模块具体用于包括若任意两个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,满足连接规则,则将两个有效的返回地址值进行串接,获得至少一个候选调用栈;所述连接规则包括但不限于若Sp1-OFFSET^SIZEi=SPk-OFFSETk ;或,SpdoFFSETJSIZEi=Spk,则RAk的所属函数为RAi的所属函数的父函数;其中,任意两个有效的返回地址值分别记为RAi和RAk,且i〈k -M1和RAk的栈指针分别为SPi和SPk,存储偏移分别为OFFSETi和OFFSETk,对应的本层开栈大小为SIZEi和smk。结合第二方面或第二方面的第一种实现方式或第二方面的第二种实现方式的第三种实现方式中,所述预设的筛选规则包括排除孤立的有效的返回地址值;最后一个有效的返回地址值的所属函数为相同的入口函数的多个候选调用栈中,排除包括结点数量少的候选调用栈;排除最后一个有效的返回地址值的所属函数不为入口函数的候选调用栈。本实施例中,通过在栈内逐层搜索,获取多个有效的RA值,进而通过判断获得的有效的RA以及其所属函数,并根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将这些RA串接得到至少一个候选调用栈,再从中筛选出目标调用栈,以得到优选的调用栈解析结果。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明提供的调用栈的解析处理方法一实施例的流程图;图2为本发明提供的调用栈的解析处理方法另一实施例的流程图;图3为本发明提供的调用栈的解析处理方法另一实施例的场景示意图;图4为本发明提供的调用栈的解析处理方法另一实施例的另一场景示意图;图5为本发明提供的调用栈的解析处理方法另一实施例的结构示意图;图6为本发明提供的调用栈的解析处理方法另一实施例的结构示意图;图7为本发明提供给的调用栈的解析处理装置一实施例的结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明提供的调用栈的解析处理方法一实施例的流程图,如图所示,该方法包括S101、在将栈的起始地址按预设字节数对齐后,按照该预设字节数进行逐层搜索,若通过判断获知当前位置的搜索值是一个有效的返回地址值,则获取该有效的返回地址(Return Address,简称RA)值以及当前位置的栈指针(Stack Pointer,简称SP);具体地,以32位处理器为例,在32位处理器中,RA和SP都是以4字节存储在栈中,即这里预设字节数为4字节,因此将栈的起始地址按预设字节数对齐,即如果栈的起始地址不是4的倍数,则进行调整,从下一个4的倍数位置开始搜索。以扫描一块12字节大小的栈内存为例,假设该栈内存起始地址为0x00082001,栈由高地址向低地址增长,对该块栈内存从起始地址处开始依次编号为(Th,由于起始地址(对应编号O的位置),没有按4字节对齐,故从编号3对应的位置,对应地址0x00082004开始搜索,相应的,当前搜索值为栈内从当前搜索位置开始连续4字节的内容,即在该例中编号“3、4、5、6”位置中的内容,最终被搜索的值为编号“3、4、5、6”和编号“7、8、9、10”位置中的内容,另外,最后一个字节,即编号11位置,不够4字节,不参与搜索。S102、获取每一个有效的RA值的所属函数,扫描该所属函数的汇编指令,获得上述RA所在层的本层开栈大小以及在本层中的存储偏移,其中,该本层开栈大小为上述所属函数的入口到上述当前位置的开栈大小;其中,当前位置为保存RA的位置。需要说明的是,程序中每一个有效的RA只可能对应一个函数,即该RA值的所属函数。S103、根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个上述返回地址值进行串接,获得至少一个候选调用栈;这种重新串接的方式,无需严格按照原调用栈的串接方式,例如,当前函数fl调用函数f2,函数f2调用函数f3,但是f2异常或出现其他故障,依然可以获得fl — f3作为候选调用栈。S104、根据预设的筛选规则,在上述至少一个候选调用栈中筛选出目标调用栈。本实施例中,通过在栈内逐层搜索,获取多个有效的RA值,进而判断获得有效的RA以及其所属函数,并将这些RA串接得到至少一个候选调用栈,再从中筛选出目标调用栈,得到优选的调用栈解析结果。图2为本发明提供的调用栈的解析处理方法另一实施例的流程图,如图2所示,具体实现过程中,上述判断当前位置的搜索值是否是一个有效的返回地址值的步骤包括对每一个预设字节数的栈值依次进行是否位于代码段、是否位于函数体、是否满足指令对齐要求、是否临近区域存在函数调用指令的判断,若均满足,则获知当前位置的搜索值是一个有效的RA ;其中预设字节数的栈值就是搜索值,即搜索值要符合预设的字节数,具体地,S201、判断当前搜索值是否位于代码段,若位于代码段,则执行S202,否则执行S206 ;因为在程序中RA—定位于代码段,而不会是数据段或其它段中;该步骤也可以为可选步骤,因为执行了 S202,可以判断出搜索值在函数体内,而一般函数体都是位于代码段的,所以该步骤可省略,当然如果执行该步骤,可以使判断性能更好。S202、判断当前搜索值是否位于函数体内,也就是不包含函数开头的其它指令区域,若位于函数体内,则执行S203,否则执行S206。S203、判断当前搜索值是否满足指令对齐要求,若满足,则执行S205,否则执行S206 ;例如,一些处理器的指令地址要求按4字节对齐。S204、判断当前搜索值临近区域内是否存在函数调用指令,若存在,则实行S205,否则执行S206 ;因为RA的作用是为了让子函数返回到父函数的RA处继续执行,所以对于一个保存在栈中的RA,必然存在着父函数对子函数的调用。S205、记录当前搜索值,即RA值以及当前位置的SP值。S206、给当前搜索值加预设字节数,获得新的搜索值位置的SP值,进而重复执行步骤S201 S206,获取栈内所有的RA。另外,上述根据每一个有效的RA值对应的栈地址、本层开栈大小和存储偏移,将各个上述RA值进行串接,举例说明具体实现过程
所有搜索出的RA值会按照搜索顺序进行编号,将任意两个有效的RA记为RAi和RAk,且i〈k,其中,RAi和RAk的栈指针分别为SPi和SPk,存储偏移分别为OFFSETi和OFFSETk,对应的本层开栈大小为SIZEi和SIZEk ;若任意两个有效的RA值对应的栈指针、本层开栈大小和存储偏移,满足连接规贝U,则将两个有效的RA值进行串接;该连接规则包括但不限于若SP1-OFFSETJSIZEi = SPk-OFFSETk ;或,SPdOFFSETdSIZEi = SPk,这两种连接规则分别体现了栈内的两种场景,这两种场景的差异在于存储偏移的方向不同,如果满足该连接规则,RAk的所属函数为RAi的所属函数的父函数,可以将RAk和RAi串接起来。图3为本发明提供的调用栈的解析处理方法另一实施例的场景示意图,如图3所示,为符合SP^OFFSETi+SIZEi = SPk-OFFSETk的场景,即上述连接规则中的第一种。图4为本发明提供的调用栈的解析处理方法另一实施例的另一场景示意图,如图 4所示,为符合SpdOFFSETJSIZEi = SPk的场景,即上述连接规则中的第二种。进一步的,上述预设的筛选规则可以包括以下三种,但并不以此为限1、排除孤立的有效RA值,即没有其它RA值可以与该RA值串接,因而该RA的所属函数可能没有调用其它函数也没有被其它函数调用,该RA也可能只是程序运行时保存在栈中的过程值,而不属于当前调用栈;2、最后一个有效的返回地址值的所属函数为相同的入口函数的多个候选调用栈中,排除包括结点数量少的候选调用栈;例如,存在最后一个有效的返回地址值的所属函数为相同的入口函数的调用栈A和调用栈B,其中调用栈A为fl — f4 — f5 — f3,而调用栈B为f2 — f5 — f3,则排除调用栈B ;3、排除最后一个有效的返回地址值的所属函数不为入口函数的候选调用栈,SP如果调用栈A的最后一个有效的RA值所属函数为入口函数,而调用栈B的最后一个有效的RA值所属函数不是入口函数,那么排除调用栈B。需要说明的是,以上几种筛选规则在实施过程中,并非强制实行,可以根据具体情况选择使用。图5为本发明提供的调用栈的解析处理方法另一实施例的结构示意图,如图5所示,举例说明上述筛选规则2,即调用栈A为f I — f4 — f5 — f3,而调用栈B为f2 — f5 — f3,则排除调用栈B,保留调用栈A作进一步筛选。图6为本发明提供的调用栈的解析处理方法另一实施例的结构示意图,如图6所示,举例说明上述筛选规则3,即调用栈A为f2 — f I — f5,而调用栈B为f3 — f I — f4,其中f5为入口函数,而f4不是入口函数,则排除调用栈B,保留调用栈A作进一步筛选。本实施例中,通过在栈内逐层搜索,通过判断获得有效的RA以及其所属函数,并将这些RA按照一定连接规则串接,得到至少一个候选调用栈,再从中筛选出目标调用栈,即得到优选的调用栈解析结果;另外,本实施例中提供的方法,可以在调用栈被破坏或缺失寄存器现场时,依然可以解析得到一个优选的调用栈进行查看,且通过本实施例提供的串接方法还可以获得当前函数已调用子函数的历史调用函数,并且相对于现有技术,可靠性和准确性更高。图7为本发明提供给的调用栈的解析处理装置一实施例的结构示意图,如图7所示,该装置包括第一获取模块301、第二获取模块302、串接模块303和筛选模块304,其中第一获取模块301,用于在将栈的起始地址按预设字节数对齐后,按照所述预设字节数进行逐层搜索,若通过判断获知当前位置的搜索值是一个有效的返回地址值,则获取所述有效的返回地址值以及当前位置的栈指针;第二获取模块302,用于获取每一个有效的返回地址值的所属函数,扫描所述所属函数的汇编指令,获得所述返回地址值所在层的本层开栈大小以及在本层中的存储偏移;所述本层开栈大小为所述所属函数的入口到所述当前位置的开栈大小;串接模块303,用于根据每一个有效的返回地址值对应的栈指针、本 层开栈大小和存储偏移,将各个所述返回地址值进行串接,获得至少一个候选调用栈;筛选模块304,用于根据预设的筛选规则,在所述至少一个候选调用栈中筛选出目标调用栈。本实施例中,通过在栈内逐层搜索,获取多个有效的RA值,通过判断获得有效的RA以及其所属函数,并将这些RA串接得到至少一个候选调用栈,再从中筛选出目标调用栈,即得到优选的调用栈解析结果。在具体实现过程中,第一获取模块301判断当前位置的搜索值是否是一个有效的返回地址值具体包括对每一个预设字节数的栈值依次进行是否位于代码段、是否位于函数体、是否满足指令对齐要求、是否临近区域存在函数调用指令的判断,若均满足,则获知当前位置的搜索值是一个有效的返回地址值。串接模块303具体用于包括若任意两个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,满足连接规则,则将两个有效的返回地址值进行串接,获得至少一个候选调用栈;所述连接规则包括但不限于若Sp1-OFFSET^SIZEi=SP1-OFFSETk ;或,SpdoFFSETJSIZEi=Spk,则RAk的所属函数为RAi的所属函数的父函数;其中,任意两个有效的返回地址值分别记为RAi和RAk,且i〈k -M1和RAk的栈指针分别为SPi和SPk,存储偏移分别为OFFSETi和OFFSETk,对应的本层开栈大小为SIZEi和SUEk。需要说明的是,上述预设的筛选规则包括排除孤立的有效的返回地址值;最后一个有效的返回地址值的所属函数为相同的入口函数的多个候选调用栈中,排除包括结点数量少的候选调用栈;排除最后一个有效的返回地址值的所属函数不为入口函数的候选调用栈。需要说明的是,以上几种筛选规则在实施过程中,并非强制实行,可以根据具体情况选择使用。本实施例中,通过在栈内逐层搜索,通过判断获得的有效的RA以及其所属函数,并将这些RA按照一定连接规则串接,得到至少一个候选调用栈,再根据预设的筛选规则从中筛选出目标调用栈,就可以得到优选的调用栈解析结果;另外,本实施例中提供的方法,可以在调用栈被破坏或缺失寄存器现场时,依然可以解析得到一个优选的调用栈进行查看,且通过本实施例提供的串接方法还可以获得当前函数已调用子函数的历史调用函数,并且相对于现有技术,可靠性和准确性更高。本发明实施例还提供一种调用栈的解析处理装置,该装置包括一处理器,所述处理器通过运行内部程序以执行以下操作,包括在将栈的起始地址按预设字节数对齐后,按照所述预设字节数进行逐层搜索,若通过判断获知当前位置的搜索值是一个有效的返回地址值,则获取所述有效的返回地址值以及当前位置的栈指针;获取每一个有效的返回地址值的所属函数,扫描所述所属函数的汇编指令,获得所述返回地址值所在层的本层开栈大小以及在本层中的存储偏移;所述本层开栈大小为所述所属函数的入口到所述当前位置的开栈大小;根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接,获得至少一个候选调用栈;根据预设的筛选规则,在所述至少一个候选调用栈中筛选出目标调用栈。在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括U盘、移动硬盘、只读存储器(Read-Only Memory, ROM)、随机存取存储器(Random Access Memory, RAM)、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
权利要求
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.一种调用栈的解析处理装置,其特征在于,包括 第一获取模块,用于在将栈的起始地址按预设字节数对齐后,按照所述预设字节数进行逐层搜索,若通过判断获知当前位置的搜索值是一个有效的返回地址值,则获取所述有效的返回地址值以及当前位置的栈指针; 第二获取模块,用于获取每一个有效的返回地址值的所属函数,扫描所述所属函数的汇编指令,获得所述返回地址值所在层的本层开栈大小以及在本层中的存储偏移;所述本层开栈大小为所述所属函数的入口到所述当前位置的开栈大小; 串接模块,用于根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接,获得至少一个候选调用栈; 筛选模块,用于根据预设的筛选规则,在所述至少一个候选调用栈中筛选出目标调用栈。
6.根据权利要求5所述的装置,其特征在于,所述第一获取模块判断当前位置的搜索值是否是一个有效的返回地址值具体包括 对每一个预设字节数的栈值依次进行是否位于代码段、是否位于函数体、是否满足指令对齐要求、是否临近区域存在函数调用指令的判断,若均满足,则获知当前位置的搜索值是一个有效的返回地址值。
7.根据权利要求5所述的装置,其特征在于,所述串接模块具体用于包括 若任意两个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,满足连接规贝U,则将两个有效的返回地址值进行串接,获得至少一个候选调用栈; 所述连接规则包括但不限于若SP1-OFFsETJSIZEi=SPk-OFFSETk ;或,SpdoFFSETJSIZEi=Spk,则RAk的所属函数为RAi的所属函数的父函数; 其中,任意两个有效的返回地址值分别记为RAi和RAk,且i〈k ;RA,和RAk的栈指针分别为SPi和SPk,存储偏移分别为OFFSETi和OFFSETk,对应的本层开栈大小为SIZEi和SIZEk。
8.根据权利要求5或6或7所述的装置,其特征在于,所述预设的筛选规则包括 排除孤立的有效的返回地址值; 最后一个有效的返回地址值的所属函数为相同的入口函数的多个候选调用栈中,排除包括结点数量少的候选调用栈; 排除最后一个有效的返回地址值的所属函数不为入口函数的候选调用栈。
全文摘要
本发明实施例提供一种调用栈的解析处理方法及装置,该方法包括按照预设字节数进行逐层搜索,若通过判断获知当前位置的搜索值是一个有效的返回地址值,则获取所述有效的返回地址值以及当前位置的栈指针;获得所述返回地址值所在层的本层开栈大小以及在本层中的存储偏移;根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接,获得候选调用栈;根据预设的筛选规则,在所述至少一个候选调用栈中筛选出目标调用栈。本发明实施例通过获取多个有效的RA值,并判断获得的有效的RA以及其所属函数,再将这些RA串接得到至少一个候选调用栈,从中筛选出目标调用栈,可以得到优选的调用栈解析结果。
文档编号G06F11/36GK103019707SQ20121050450
公开日2013年4月3日 申请日期2012年11月30日 优先权日2012年11月30日
发明者雷镇 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1