[发明专利]调用栈的解析处理方法及装置有效
申请号: | 201210504505.2 | 申请日: | 2012-11-30 |
公开(公告)号: | CN103019707A | 公开(公告)日: | 2013-04-03 |
发明(设计)人: | 雷镇 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F11/36 |
代理公司: | 北京同立钧成知识产权代理有限公司 11205 | 代理人: | 刘芳 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 调用 解析 处理 方法 装置 | ||
1.一种调用栈的解析处理方法,其特征在于,包括:
在将栈的起始地址按预设字节数对齐后,按照所述预设字节数进行逐层搜索,若通过判断获知当前位置的搜索值是一个有效的返回地址值,则获取所述有效的返回地址值以及当前位置的栈指针;
获取每一个有效的返回地址值的所属函数,扫描所述所属函数的汇编指令,获得所述返回地址值所在层的本层开栈大小以及在本层中的存储偏移,所述本层开栈大小为所述所属函数的入口到所述当前位置的开栈大小;
根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接,获得至少一个候选调用栈;
根据预设的筛选规则,在所述至少一个候选调用栈中筛选出目标调用栈。
2.根据权利要求1所述的方法,其特征在于,判断当前位置的搜索值是否是一个有效的返回地址值的步骤包括:
对每一个预设字节数的栈值依次进行是否位于代码段、是否位于函数体、是否满足指令对齐要求、是否临近区域存在函数调用指令的判断,若均满足,则获知当前位置的搜索值是一个有效的返回地址值。
3.根据权利要求1所述的方法,其特征在于,所述根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接包括:
若任意两个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,满足连接规则,则将两个有效的返回地址值进行串接;
所述连接规则包括但不限于:若SPi-OFFSETi+SIZEi=SPk-OFFSETk;或,SPi+OFFSETi+SIZEi=SPk,则RAk的所属函数为RAi的所属函数的父函数;
其中,任意两个有效的返回地址值分别记为RAi和RAk,且i<k;RAi和RAk的栈指针分别为SPi和SPk,存储偏移分别为OFFSETi和OFFSETk,对应的本层开栈大小为SIZEi和SIZEk。
4.根据权利要求1或2或3所述的方法,其特征在于,所述预设的筛选规则包括:
排除孤立的有效的返回地址值;
最后一个有效的返回地址值的所属函数为相同的入口函数的多个候选调用栈中,排除包括结点数量少的候选调用栈;
排除最后一个有效的返回地址值的所属函数不为入口函数的候选调用栈。
5.一种调用栈的解析处理装置,其特征在于,包括:
第一获取模块,用于在将栈的起始地址按预设字节数对齐后,按照所述预设字节数进行逐层搜索,若通过判断获知当前位置的搜索值是一个有效的返回地址值,则获取所述有效的返回地址值以及当前位置的栈指针;
第二获取模块,用于获取每一个有效的返回地址值的所属函数,扫描所述所属函数的汇编指令,获得所述返回地址值所在层的本层开栈大小以及在本层中的存储偏移;所述本层开栈大小为所述所属函数的入口到所述当前位置的开栈大小;
串接模块,用于根据每一个有效的返回地址值对应的栈指针、本层开栈大小和存储偏移,将各个所述返回地址值进行串接,获得至少一个候选调用栈;
筛选模块,用于根据预设的筛选规则,在所述至少一个候选调用栈中筛选出目标调用栈。
6.根据权利要求5所述的装置,其特征在于,所述第一获取模块判断当前位置的搜索值是否是一个有效的返回地址值具体包括:
对每一个预设字节数的栈值依次进行是否位于代码段、是否位于函数体、是否满足指令对齐要求、是否临近区域存在函数调用指令的判断,若均满足,则获知当前位置的搜索值是一个有效的返回地址值。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210504505.2/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种自洁活性炭吸附塔
- 下一篇:废气吸收处理装置