一种野指针的函数栈信息确定方法、装置及电子设备制造方法及图纸

技术编号:15060254 阅读:31 留言:0更新日期:2017-04-06 09:54
本发明专利技术实施例提供一种野指针的函数栈信息确定方法、装置及电子设备,其中方法包括:钩子内存调用函数,以在调用内存调用函数时,确定内存调用函数的栈信息;确定内存调用函数指向的内存区域,记录所确定的内存区域及内存区域所对应的内存调用函数的栈信息;当由野指针导致应用崩溃时,确定野指针所指向的内存区域;从所记录的内存区域及内存区域所对应的内存调用函数的栈信息中,确定野指针所指向的内存区域的栈信息,得到野指针的函数栈信息。本发明专利技术实施例在确定野指针的函数栈信息时,极大简化了处理逻辑,使得野指针的函数栈信息的确定较为简便。

【技术实现步骤摘要】

本专利技术涉及数据处理
,具体涉及一种野指针的函数栈信息确定方法、装置及电子设备。
技术介绍
野指针是指向不可用内存区域的指针,应用在运行时若对野指针进行操作,将导致应用crash(崩溃);野指针导致应用(如IOS应用等)crash的原理主要为,应用的一个对象(对象为类的实例)被释放后,其对应的内存区域将成为不可用的内存区域,而其他对象在持有该对象的指针(即野指针)时,若继续使用该指针,将导致应用crash。为定位由野指针导致应用crash的问题代码,确定野指针所涉及的函数调用信息显得尤为必要。目前确定野指针所涉及的函数调用信息的方式主要为,重现由野指针导致的应用crash场景,从而通过辅助工具定位到野指针所涉及的函数调用信息;然而,重现由野指针导致的应用crash场景需要耗费极大的工作量,实现逻辑较为繁琐,且成功率无法保证;因此如何简便且准确的确定出野指针的函数调用信息,成为本领域技术人员需要考虑的问题。
技术实现思路
有鉴于此,本专利技术实施例提供一种野指针的函数栈信息确定方法、装置及电子设备,以简便且准确的确定出野指针的函数调用信息。为实现上述目的,本专利技术实施例提供如下技术方案:一种野指针的函数栈信息确定方法,包括:钩子内存调用函数,以在调用内存调用函数时,确定内存调用函数的栈信息;确定内存调用函数指向的内存区域,记录所确定的内存区域及内存区域所对应的内存调用函数的栈信息;当由野指针导致应用崩溃时,确定野指针所指向的内存区域;从所记录的内存区域及内存区域所对应的内存调用函数的栈信息中,确定野指针所指向的内存区域的栈信息,得到野指针的函数栈信息。本专利技术实施例还提供一种野指针的函数栈信息确定装置,包括:钩子模块,用于钩子内存调用函数,以在调用内存调用函数时,确定内存调用函数的栈信息;确定并记录模块,用于确定内存调用函数指向的内存区域,记录所确定的内存区域及内存区域所对应的内存调用函数的栈信息;崩溃确定模块,用于确定由野指针导致应用崩溃;指向内存区域确定模块,用于当由野指针导致应用崩溃时,确定野指针所指向的内存区域;栈信息确定模块,用于从所记录的内存区域及内存区域所对应的内存调用函数的栈信息中,确定野指针所指向的内存区域的栈信息,得到野指针的函数栈信息。本专利技术实施例还提供一种电子设备,包括上述所述的野指针的函数栈信息确定装置。基于上述技术方案,本专利技术实施例提供的野指针的函数栈信息确定方法,可通过钩子(hook)内存调用函数,记录得到内存调用函数所操作的内存区域,及内存区域对应的内存调用函数的栈信息,从而在由野指针导致应用崩溃时,可通过野指针所指向的内存区域,从已记录的内存区域及内存区域所对应的内存调用函数的栈信息中,确定出野指针的函数栈信息;本专利技术实施例提供的野指针的函数栈信息的确定方法,涉及钩子的内存调用函数调用时的数据记录,野指针所指向的内存区域的确定,与在已记录数据中查找野指针的函数栈信息的操作,可在由野指针导致应用崩溃时,即确定出野指针的函数栈信息,不需重现由野指针导致的应用崩溃场景,极大简化了确定野指针的函数栈信息过程中所涉及的处理逻辑,使得野指针的函数栈信息的确定较为简便。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1为本专利技术实施例提供的野指针的函数栈信息确定方法的流程图;图2为本专利技术实施例提供的野指针的函数栈信息确定方法的另一流程图;图3为本专利技术实施例提供的由野指针导致应用crash的确定方法流程图;图4为本专利技术实施例提供的由野指针导致应用crash的确定方法的另一流程图;图5为crashlog的记录内容示意图;图6为本专利技术实施例提供的野指针的函数栈信息确定方法的再一流程图;图7为本专利技术实施例提供的野指针的函数栈信息确定装置的结构框图;图8为本专利技术实施例提供的钩子模块的结构框图;图9为本专利技术实施例提供的崩溃确定模块的结构框图;图10为本专利技术实施例提供的指向内存区域确定模块的结构框图;图11为本专利技术实施例提供的崩溃确定模块的另一结构框图;图12为本专利技术实施例提供的指向内存区域确定模块的另一结构框图;图13为本专利技术实施例提供的野指针的函数栈信息确定装置的另一结构框图;图14为本专利技术实施例提供的日志记录模块的结构框图;图15为本专利技术实施例提供的电子设备的硬件结构框图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。图1为本专利技术实施例提供的野指针的函数栈信息确定方法的流程图,该方法可应用于装载有应用的电子设备,如装载有IOS应用的电子设备,电子设备如手机、平板电脑等用户设备;参照图1,该方法可以包括:步骤S100、hook内存调用函数,以在调用内存调用函数时,确定内存调用函数的栈信息;hook又称钩子技术,通过跳转或者修改函数表来实现在系统或第三方函数调用前执行到设定的函数;内存调用函数的栈信息(也称函数栈信息)表示的是函数被调用时的栈状态,通过函数栈信息可以回溯到函数的调用者(如回溯到函数的上一个乃至第一个调用者);可选的,本专利技术实施例在调用内存调用函数时,可通过hook技术,加入栈回溯指令,从而回溯到所调用的内存调用函数的栈信息;在本专利技术实施例中,野指针所涉及的函数调用信息,主要是指野指针所指向的内存区域的内存调用函数的栈信息(即野指针的函数栈信息),通过野指针的函数栈信息,可清楚的知道野指针所指向的内存区域的分配、释放所涉及的代码,从而便于问题代码的定位;应用运行过程中存在通过内存调用函数为对象分配、释放内存的操作;可选的,内存调用函数可以包括:为对象分配内存区域的内存分配函数,和/或,为对象释放内存区域的内存释放函数;相应的,内存调用函数的栈信息可以包括:为对象分配内存区域的栈信息,和/或,为对象释放内存区域的栈信息;本专利技术实施例可在每一个内存调用函数被调用执行时,通过hook内存调用函数,以在内存调用函数为对象释放或分配内存区域前,执行栈回溯指令,从而回溯到内存调用函数的栈信息,步骤S110、确定内存调用函数指向的内存区域,记录所确定的内存区域及内存区域所对应的内存调用函数的栈信息;内存区域所对应的内存调用函数的栈信息是指,操作该内存区域的内存调用函数的栈信息;如分配该内存区域的内存分配函数的栈信息,和释放该内存区域的内存释放函数的栈信息;步骤S100所回溯到的内存调用函数的栈信息将与内存调用函数当前对象释放或分配的内存区域相关联,从而记录到内存调用函数当前对象的内存区域,及内存调用函数对应的栈信息;可选的,内存区域可以为内存地址;通过步骤S100的操作,本专利技术实施例可记录到各内存区域在被释放或分配时,所对应的栈信息,记录得到内存区域被释放或分配时所涉及的函数(函数由栈信息反映)。步骤S120、当由野指针导致应用cras本文档来自技高网...

【技术保护点】
一种野指针的函数栈信息确定方法,其特征在于,包括:钩子内存调用函数,以在调用内存调用函数时,确定内存调用函数的栈信息;确定内存调用函数指向的内存区域,记录所确定的内存区域及内存区域所对应的内存调用函数的栈信息;当由野指针导致应用崩溃时,确定野指针所指向的内存区域;从所记录的内存区域及内存区域所对应的内存调用函数的栈信息中,确定野指针所指向的内存区域的栈信息,得到野指针的函数栈信息。

【技术特征摘要】
1.一种野指针的函数栈信息确定方法,其特征在于,包括:钩子内存调用函数,以在调用内存调用函数时,确定内存调用函数的栈信息;确定内存调用函数指向的内存区域,记录所确定的内存区域及内存区域所对应的内存调用函数的栈信息;当由野指针导致应用崩溃时,确定野指针所指向的内存区域;从所记录的内存区域及内存区域所对应的内存调用函数的栈信息中,确定野指针所指向的内存区域的栈信息,得到野指针的函数栈信息。2.根据权利要求1所述的野指针的函数栈信息确定方法,其特征在于,所述钩子内存调用函数包括:钩子父类对象的内存调用函数。3.根据权利要求1所述的野指针的函数栈信息确定方法,其特征在于,所述钩子内存调用函数包括:钩子内存分配函数,以在调用内存分配函数时,确定内存分配函数的栈信息;及钩子内存释放函数,以在调用内存释放函数时,确定内存释放函数的栈信息;所述确定野指针所指向的内存区域的栈信息包括:确定野指针所指向的内存区域的内存分配函数的栈信息,和内存释放函数的栈信息。4.根据权利要求1-3任一项所述的野指针的函数栈信息确定方法,其特征在于,所述由野指针导致应用崩溃的确定过程包括:当应用崩溃时,分析应用崩溃时的顶层函数是否与预置函数对应,若确定应用崩溃时的顶层函数与预置函数对应,则确定是由野指针导致的应用崩溃;或,当应用崩溃时,分析应用崩溃时的异常关键字是否与预置关键字对应,若确定应用崩溃时的异常关键字与预置关键字对应,则确定是由野指针导致的应用崩溃。5.根据权利要求4所述的野指针的函数栈信息确定方法,其特征在于,所述确定野指针所指向的内存区域包括:在由野指针导致的应用崩溃时,若顶层函数与预置函数对应,则从顶层函数对应的寄存器中提取出野指针所指向的内存区域;或,在由野指针导致的应用崩溃时,若异常关键字与预置关键字对应,则从所述异常关键字中解析出野指针所指向的内存区域。6.根据权利要求1所述的野指针的函数栈信息确定方法,其特征在于,还包...

【专利技术属性】
技术研发人员:李伟俞骁
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1