[发明专利]一种建立函数栈的方法、装置、介质和电子设备有效
申请号: | 202010009897.X | 申请日: | 2020-01-06 |
公开(公告)号: | CN111209042B | 公开(公告)日: | 2022-08-26 |
发明(设计)人: | 朴英敏 | 申请(专利权)人: | 北京字节跳动网络技术有限公司 |
主分类号: | G06F9/34 | 分类号: | G06F9/34 |
代理公司: | 北京睿驰通程知识产权代理事务所(普通合伙) 11604 | 代理人: | 唐华;张文平 |
地址: | 100041 北京市石景山区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 建立 函数 方法 装置 介质 电子设备 | ||
1.一种建立函数栈的方法,其特征在于,包括:
获取指令计数器中的指令执行地址;
当所述指令执行地址的值为第一调用函数的第一调用地址时,则获取第一返回地址和通过栈指针获取栈指针值;以及
基于所述第一调用地址、所述第一返回地址和所述栈指针值检索历史函数栈数据集,获取检索结果;
当所述检索结果非空时,则确定所述检索结果为与第二调用函数相关联的第二克隆函数栈地址,且创建与所述第一调用函数相关联的第一函数栈,并根据所述第二克隆函数栈地址将第二克隆函数栈中的信息复制到所述第一函数栈中,其中,所述第二克隆函数栈地址指向第二克隆函数栈的地址,所述第二克隆函数栈保存着所述第二调用函数的函数栈的信息。
2.根据权利要求1所述的方法,其特征在于,所述基于所述第一调用地址、所述第一返回地址和所述栈指针值检索历史函数栈数据集,获取检索结果,包括:
基于所述第一调用地址、所述第一返回地址和页对齐值检索历史函数栈数据集,获取检索结果;其中,所述页对齐值是所述栈指针值的后三位的值。
3.根据权利要求1所述的方法,其特征在于,在所述获取检索结果后,还包括:
当所述检索结果为空时,则创建与所述第一调用函数相关联的第一函数栈,并将与所述第一调用函数相关联的调用信息存入所述第一函数栈中;其中,所述调用信息至少包括所述第一返回地址。
4.根据权利要求3所述的方法,其特征在于,在所述将与所述第一调用函数相关联的调用信息存入所述第一函数栈中后,还包括:
基于所述第一函数栈获取第一函数栈地址;
将所述第一调用地址、所述第一返回地址、所述栈指针值和所述第一函数栈地址保存到历史函数栈数据集中。
5.根据权利要求4所述的方法,其特征在于,所述将所述第一调用地址、所述第一返回地址、所述栈指针值和所述第一函数栈地址保存到历史函数栈数据集中后,还包括:
复制所述第一函数栈,生成第一克隆函数栈。
6.根据权利要求1所述的方法,其特征在于,所述获取第一返回地址,至少包括以下获取方式之一:
从链接寄存器中获取第一返回地址;
计算所述指令执行地址加一的值,获取第一返回地址。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述方法应用于ARM架构。
8.一种建立函数栈的装置,其特征在于,包括:
获取指令执行地址单元,用于获取指令计数器中的指令执行地址;
获取参数信息单元,用于当所述指令执行地址的值为第一调用函数的第一调用地址时,则获取第一返回地址和通过栈指针获取栈指针值;
检索单元,用于基于所述第一调用地址、所述第一返回地址和所述栈指针值检索历史函数栈数据集,获取检索结果;
第一复制单元,用于当所述检索结果非空时,则确定所述检索结果为与第二调用函数相关联的第二克隆函数栈地址,且创建与所述第一调用函数相关联的第一函数栈,并根据所述第二克隆函数栈地址将第二克隆函数栈中的信息复制到所述第一函数栈中,其中,所述第二克隆函数栈地址指向第二克隆函数栈的地址,所述第二克隆函数栈保存着所述第二调用函数的函数栈的信息。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1至7中任一项所述的方法。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1至7中任一项所述的方法。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京字节跳动网络技术有限公司,未经北京字节跳动网络技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010009897.X/1.html,转载请声明来源钻瓜专利网。