程序调用栈创建方法、栈回溯方法和装置与流程

文档序号:33422240发布日期:2023-03-11 00:09阅读:来源:国知局

技术特征:
1.一种程序调用栈的创建方法,其特征在于,所述方法包括:获取第一程序,所述第一程序中包括第一函数;在调用运行时库运行所述第一程序的过程中,添加第二函数以及创建调用栈,其中,所述调用栈中包括对应于所述第一函数的第一栈帧,对应于所述第二函数的第二栈帧以及对应于第三函数的第三栈帧,其中,所述第一函数和所述第二函数之间存在调用关系,所述第二函数和所述第三函数之间存在调用关系,所述第三函数为所述运行时库中的函数或所述第一程序中的函数,所述第一函数对应的高级编程语言和所述第三函数对应的高级编程语言不同;保存第一返回地址以及所述第一返回地址对应的标签,所述第一返回地址为所述第一函数和所述第三函数中,后被执行的函数对应的栈帧中包含的返回地址,所述第一返回地址对应的标签指示了所述第一栈帧的栈帧类型、所述第二栈帧的栈帧类型和所述第三栈帧的栈帧类型。2.根据权利要求1所述的方法,其特征在于,所述第一函数调用所述第二函数,所述第二函数调用所述第三函数,所述第一返回地址为所述第三栈帧中包含的返回地址,或者,所述第三函数调用所述第二函数,所述第二函数调用所述第一函数,所述第一返回地址为所述第一栈帧中包含的返回地址。3.根据权利要求1或2所述的方法,其特征在于,所述第二函数通过编译器或手写汇编生成,并存储于编译后的高级语言代码库或者编译后的运行时代码库中。4.根据权利要求1-3中任一项所述的方法,其特征在于,所述第一返回地址保存于返回地址集合,所述返回地址集合中的每个返回地址指向的函数均为边界函数,所述边界函数的调用函数和所述边界函数的被调用函数对应不同种类的高级编程语言,所述每个返回地址对应的标签指示了所述每个返回地址指向的函数对应栈帧的栈帧类型,以及指示了所述每个返回地址指向的函数的调用函数对应栈帧的栈帧类型。5.根据权利要求4中所述的方法,其特征在于,所述调用栈中包括对应于第四函数的第四栈帧,所述第四栈帧的栈帧类型为第一类型,所述第四栈帧的栈帧类型与所述第四函数对应的高级编程语言的种类有关;所述方法还包括:对所述第四栈帧进行栈回溯,包括:获取所述第四栈帧中的第二返回地址,所述第二返回地址指向第五函数,所述第五函数为调用所述第四函数的函数;当所述第二返回地址属于所述返回地址集合时,将第五栈帧的栈帧类型设置为第二类型,所述第五栈帧为所述第五函数对应的栈帧,所述第二类型指示所述第五函数为所述边界函数,以及,将第六栈帧的栈帧类型设置为第三类型,所述第六栈帧为第六函数对应的栈帧,所述第六函数为调用所述第五函数的函数,所述第六栈帧的栈帧类型与所述第四栈帧的栈帧类型不同;当所述第四栈帧中的返回地址不属于所述返回地址集合时,将第五栈帧的栈帧类型设
置为所述第一类型,所述第五栈帧为所述第五函数对应的栈帧。6.根据权利要求5中所述的方法,其特征在于,所述第二类型和所述第三类型是所述第二返回地址对应的标签所指示的两个栈帧类型。7.根据权利要求5或6中所述的方法,其特征在于,所述方法还包括:获取所述第四栈帧中的帧指针fp;若所述fp指向所述调用栈的栈底,结束所述第四栈帧的栈回溯过程。8.根据权利要求5-7中任一项所述的方法,其特征在于,当所述第四栈帧为所述调用栈的栈顶处的栈帧时,所述第一类型与所述运行时库的高级编程语言的种类有关。9.一种调用栈的栈回溯方法,其特征在于,所述调用栈中包括对应于第四函数的第四栈帧,所述第四栈帧的栈帧类型为第一类型,所述第四栈帧的栈帧类型与所述第四函数对应的高级编程语言的种类有关,所述方法包括:获取所述第四栈帧中的第二返回地址,所述第二返回地址指向第五函数,所述第五函数为调用所述第四函数的函数;当所述第二返回地址属于返回地址集合时,将第五栈帧的栈帧类型设置为第二类型,所述返回地址集合中的每个返回地址指向的函数均为边界函数,所述边界函数的调用函数和所述边界函数的被调用函数对应不同种类的高级编程语言,所述第五栈帧为所述第五函数对应的栈帧,所述第二类型指示所述第五函数为所述边界函数,以及,将第六栈帧的栈帧类型设置为第三类型,所述第六栈帧为第六函数对应的栈帧,所述第六函数为调用所述第五函数的函数,所述第六栈帧的栈帧类型与所述第四栈帧的栈帧类型不同;当所述第二返回地址不属于所述返回地址集合时,将第五栈帧的栈帧类型设置为所述第一类型,所述第五栈帧为所述第五函数对应的栈帧。10.根据权利要求9所述的方法,其特征在于,所述第二类型和所述第三类型为所述第二返回地址对应的标签所指示的两个栈帧类型;所述每个返回地址对应的标签指示所述每个返回地址指向的函数对应栈帧的栈帧类型,以及指示所述每个返回地址指向的函数的调用者函数对应栈帧的栈帧类型。11.根据权利要求9或10中所述的方法,其特征在于,所述方法还包括:获取所述第四栈帧中的帧指针fp;若所述fp指向所述调用栈的栈底时,结束所述栈回溯过程。12.根据权利要求9-11中任一项所述的方法,其特征在于,当所述第四栈帧为所述调用栈的栈顶处的栈帧时,所述第一类型与运行时库的高级编程语言的种类有关。13.根据权利要求9-12中任一项所述的方法,其特征在于,所述调用栈是在调用运行时库运行第一程序的过程中创建的,所述第一程序中包括第一函数,其中,所述调用栈中包括对应于所述第一函数的第一栈帧,对应于第二函数的第二栈帧,以及对应于第三函数的第三栈帧,其中,所述第二函数在创建所述调用栈的过程中添加的函数,所述第一函数和所述第二函数之间存在调用关系,所述第二函数和所述第三函
数之间存在调用关系,所述第三函数为所述第一程序中的函数或所述运行时库中的函数,且所述第一函数对应的高级编程语言和所述第三函数对应的高级编程语言不同;保存第一返回地址以及所述第一返回地址对应的标签,所述第一返回地址为所述第一函数和所述第三函数中,后被执行的函数对应的栈帧中包含的返回地址,所述第一返回地址对应的标签指示了所述第一栈帧的栈帧类型、所述第二栈帧的栈帧类型和所述第三栈帧的栈帧类型,所述第一返回地址属于所述返回地址集合。14.根据权利要求13所述的方法,其特征在于,所述第一函数调用所述第二函数,所述第二函数调用所述第三函数,所述第一返回地址为所述第三栈帧中包含的返回地址,或者,所述第三函数调用所述第二函数,所述第二函数调用所述第一函数,所述第一返回地址为所述第一栈帧中的返回地址。15.根据权利要求13或14中所述的方法,其特征在于,所述第二函数通过编译器或手写汇编生成,并存储于编译后的高级语言代码库或者编译后的运行时代码库中。16.一种程序调用栈创建装置,其特征在于,所述装置包括:获取单元,用于获取第一程序,所述第一程序中包括第一函数;处理单元,用于在调用运行时库运行所述第一程序的过程中,添加第二函数以及创建调用栈,其中,所述调用栈中包括对应于所述第一函数的第一栈帧,对应于所述第二函数的第二栈帧以及对应于第三函数的第三栈帧,其中,所述第一函数和所述第二函数之间存在调用关系,所述第二函数和所述第三函数之间存在调用关系,所述第三函数为所述运行时库中的函数或所述第一程序中的函数,所述第一函数对应的高级编程语言和所述第三函数对应的高级编程语言不同;存储单元,用于保存第一返回地址以及所述第一返回地址对应的标签,所述第一返回地址为所述第一函数和所述第三函数中,后被执行的函数对应的栈帧中包含的返回地址,所述第一返回地址对应的标签指示了所述第一栈帧的栈帧类型、所述第二栈帧的栈帧类型和所述第三栈帧的栈帧类型。17.根据权利要求16所述的装置,其特征在于,所述第一函数调用所述第二函数,所述第二函数调用所述第三函数,所述第一返回地址为所述第三栈帧中包含的返回地址,或者,所述第三函数调用所述第二函数,所述第二函数调用所述第一函数,所述第一返回地址为所述第一栈帧中包含的返回地址。18.根据权利要求16或17所述的装置,其特征在于,所述第二函数通过编译器或手写汇编生成,并存储于编译后的高级语言代码库或者编译后的运行时代码库中。19.根据权利要求16-18中任一项所述的装置,其特征在于,所述第一返回地址保存于返回地址集合,所述返回地址集合中的每个返回地址指向的函数均为边界函数,所述边界函数的调用函数和所述边界函数的被调用函数对应不同种类
的高级编程语言,所述每个返回地址对应的标签指示了所述每个返回地址指向的函数对应栈帧的栈帧类型,以及指示了所述每个返回地址指向的函数的调用函数对应栈帧的栈帧类型。20.根据权利要求19所述的装置,其特征在于,所述调用栈中包括对应于第四函数的第四栈帧,所述第四栈帧的栈帧类型为第一类型,所述第四栈帧的栈帧类型与所述第四函数对应的高级编程语言的种类有关;所述处理单元,还用于对所述第四栈帧进行栈回溯;在所述栈回溯过程中,所述处理单元具体用于:指示所述获取单元获取所述第四栈帧中的第二返回地址,所述第二返回地址指向第五函数,所述第五函数为调用所述第四函数的函数;以及当所述第二返回地址属于所述返回地址集合时,将第五栈帧的栈帧类型设置为第二类型,所述第五栈帧为所述第五函数对应的栈帧,所述第二类型指示所述第五函数为所述边界函数,以及,将第六栈帧的栈帧类型设置为第三类型,所述第六栈帧为第六函数对应的栈帧,所述第六函数为调用所述第五函数的函数,所述第六栈帧的栈帧类型与所述第四栈帧的栈帧类型不同;当所述第四栈帧中的返回地址不属于所述返回地址集合时,将第五栈帧的栈帧类型设置为所述第一类型,所述第五栈帧为所述第五函数对应的栈帧。21.根据权利要求20中所述的装置,其特征在于,所述第二类型和所述第三类型是所述第二返回地址对应的标签所指示的两个栈帧类型。22.根据权利要求20或21所述的装置,其特征在于,所述获取单元,还用于获取所述第四栈帧中的帧指针fp;所述处理单元,还用于在所述fp指向所述调用栈的栈底时,结束所述第四栈帧的栈回溯过程。23.根据权利要求20-22中任一项所述的装置,其特征在于,当所述第四栈帧为所述调用栈的栈顶处的栈帧时,所述第一类型与所述运行时库的高级编程语言的种类有关。24.一种栈回溯装置,其特征在于,所述调用栈中包括对应于第四函数的第四栈帧,所述第四栈帧的栈帧类型为第一类型,所述第四栈帧的栈帧类型与所述第四函数对应的高级编程语言的种类有关;所述装置包括:获取单元,用于获取所述第四栈帧中的第二返回地址,所述第二返回地址指向第五函数,所述第五函数为调用所述第四函数的函数;处理单元,用于当所述第二返回地址属于返回地址集合时,将第五栈帧的栈帧类型设置为第二类型,所述返回地址集合中的每个返回地址指向的函数均为边界函数,所述边界函数的调用函数和所述边界函数的被调用函数对应不同种类的高级编程语言,所述第五栈帧为所述第五函数对应的栈帧,所述第二类型指示所述第五函数为所述边界函数,以及,将第六栈帧的栈帧类型设置为第三类型,所述第六栈帧为第六函数对应的栈帧,所述第六函数为调用所述第五函数的函数,所述第六栈帧的栈帧类型与所述第四栈帧的栈帧类型不同;或者
当所述第二返回地址不属于所述返回地址集合时,所述处理单元将第五栈帧的栈帧类型设置为所述第一类型,所述第五栈帧为所述第五函数对应的栈帧。25.根据权利要求24中所述的装置,其特征在于,所述第二类型和所述第三类型为所述第二返回地址对应的标签所指示的两个栈帧类型;所述每个返回地址对应的标签指示所述每个返回地址指向的函数对应栈帧的栈帧类型,以及指示所述每个返回地址指向的函数的调用者函数对应栈帧的栈帧类型。26.根据权利要求24或25中所述的装置,其特征在于,所述获取单元,还用于获取所述第四栈帧中的帧指针fp;所述处理单元,还用于在所述fp指向所述调用栈的栈底时,结束所述第四栈帧的栈回溯过程。27.根据权利要求24-26中任一项所述的装置,其特征在于,当所述第四栈帧为所述调用栈的栈顶处的栈帧时,所述第一类型与运行时库的高级编程语言的种类有关。28.根据权利要求24-26中任一项所述的装置,其特征在于,所述调用栈是在调用运行时库运行第一程序的过程中创建的,所述第一程序中包括第一函数,其中,所述调用栈中包括对应于所述第一函数的第一栈帧,对应于第二函数的第二栈帧,以及对应于第三函数的第三栈帧,其中,所述第二函数在创建所述调用栈的过程中添加的函数,所述第一函数和所述第二函数之间存在调用关系,所述第二函数和所述第三函数之间存在调用关系,所述第三函数为所述第一程序中的函数或所述运行时库中的函数,且所述第一函数对应的高级编程语言和所述第三函数对应的高级编程语言不同;所述装置还包括存储单元,所述存储单元用于:保存第一返回地址以及所述第一返回地址对应的标签,所述第一返回地址为所述第一函数和所述第三函数中,后被执行的函数对应的栈帧中包含的返回地址,所述第一返回地址对应的标签指示了所述第一栈帧的栈帧类型、所述第二栈帧的栈帧类型和所述第三栈帧的栈帧类型,所述第一返回地址属于所述返回地址集合。29.根据权利要求28中所述的装置,其特征在于,所述第一函数调用所述第二函数,所述第二函数调用所述第三函数,所述第一返回地址为所述第三栈帧中包含的返回地址,或者,所述第三函数调用所述第二函数,所述第二函数调用所述第一函数,所述第一返回地址为所述第一栈帧中的返回地址。30.根据权利要求28或29中所述的装置,其特征在于,所述第二函数通过编译器或手写汇编生成,并存储于编译后的高级语言代码库或者编译后的运行时代码库中。31.一种芯片系统,其特征在于,所述芯片系统包括至少一个处理器,存储器和接口电路,所述存储器、所述接口电路和所述至少一个处理器通过线路互联,所述至少一个存储器中存储有指令;所述指令被所述处理器执行时,权利要求1-15中任一所述的方法得以实现。32.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有程序指
令,当所述程序指令在一个或多个处理器上运行时,实现权利要求1-15中任一项所述的方法。33.一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机设备上运行时,权利要求1-15中任一项所述的方法得以实现。

技术总结
本申请公开了一种程序调用栈创建方法、栈回溯方法和装置。调用栈创建方法包括:获取第一程序,第一程序中包括第一函数;在调用运行时库运行第一程序的过程中,添加第二函数以及创建调用栈,调用栈中包括与第一函数、第二函数和第三函数分别对应的第一栈帧、第二栈帧和第三栈帧,第一函数和第二函数之间存在调用关系,第二函数和第三函数之间存在调用关系,第三函数为运行时库中或第一程序中的函数,第一函数对应的高级编程语言和第三函数对应的高级编程语言不同;保存第一返回地址对应的标签,其指示了第一栈帧、第二栈帧和第三栈帧的类型。本申请可以在满足对非回栈场景无影响的前提下,最大限度的提升栈回溯性能。最大限度的提升栈回溯性能。最大限度的提升栈回溯性能。


技术研发人员:初宁
受保护的技术使用者:华为技术有限公司
技术研发日:2021.09.08
技术公布日:2023/3/10
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1