[发明专利]确定函数调用关系的方法、装置及系统有效
申请号: | 200910261275.X | 申请日: | 2009-12-24 |
公开(公告)号: | CN102109975A | 公开(公告)日: | 2011-06-29 |
发明(设计)人: | 李宁 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F9/30 | 分类号: | G06F9/30;G06F9/34 |
代理公司: | 北京凯特来知识产权代理有限公司 11260 | 代理人: | 郑立明;焦丽 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 确定 函数 调用 关系 方法 装置 系统 | ||
技术领域
本发明涉及计算机领域,特别涉及一种确定函数调用关系的方法、装置及系统。
背景技术
程序异常或调试程序时,传统的追溯函数调用关系方法是使用CPU硬件寄存器(如帧寄存器)和堆栈来完成的。具体如,mips架构(一种CPU架构)下,帧寄存器指向当前函数的栈帧(Frame Pointer,FP),当前函数的返回地址保存在堆栈中,保存其返回地址的地址相对于当前函数的栈帧的偏移值是固定的。那么,根据栈帧和固定偏移值,可以读出当前函数的返回地址。以此循环,完成函数调用关系的追溯。
上面涉及的术语,可以参考如下理解:
栈帧:指调用函数时,在堆栈中保留的用于保存函数参数、局部变量、以及函数返回地址的一部分空间,函数返回时释放该部分空间,该部分空间的起始地址通常称为栈帧。
当前函数:指调用函数中被调用者。
上层函数:指当前函数的调用者。
函数的返回地址:指当前函数返回时,能够恢复到当前函数被调用前的代码区中地址,实现继续执行指令。
而对于如使用Gcc(GNU C Com piler,一种编译器)的O2选项构建的程序在运行时,不再使用帧寄存器来保存当前函数的栈帧,但是对于非叶子函数的情况,函数的返回地址仍然保存在堆栈区中。一种追溯函数调用关系方法,如暴力法,通过读堆栈区内存,读出的值如果恰好在代码段的区域内,则认为这是一个函数的返回地址。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
由于堆栈区内大部分保存的都是函数参数、局部变量,只是占用很小的一部分空间来保存函数返回地址。函数参数、局部变量的值是无法预测的,一旦它们的值位于代码段,暴力法就认为这是一个函数返回地址,导致确定函数调用关系中函数的返回地址的准确性低。
发明内容
本发明的实施例提供了一种确定函数调用关系的方法、装置及系统,以提高确定函数调用关系中函数的返回地址的准确性。
本发明的实施例提供一种确定函数调用关系的方法,包括:
从函数的当前代码段指令地址处开始向高地址方向搜索指令,获得所述函数的第一SP偏移值;
从所述代码段指令地址处开始向低地址方向搜索指令,获得所述函数的第二SP偏移值,以及获得保存函数返回地址的地址相对函数的栈帧的偏移值;
根据所述第一SP偏移值及第二SP偏移值获得所述函数的SP偏移值,当所述SP偏移值符合预设要求时,所述函数的堆栈指针指向所述函数的栈帧,根据所述函数的栈帧及所述偏移值,得到所述函数的返回地址。
对应的,本发明的实施例提供一种确定函数调用关系的装置,包括:
前向搜索单元,用于从函数的当前代码段指令地址处开始向高地址方向搜索指令,获得所述函数的第一SP偏移值;
后向搜索单元,用于从所述代码段指令地址处开始向低地址方向搜索指令,获得所述函数的第二SP偏移值,以及获得保存函数返回地址的地址相对函数的栈帧的偏移值;
确定单元,用于根据所述第一SP偏移值及第二SP偏移值获得所述函数的SP偏移值,当所述SP偏移值符合预设要求时,所述函数的堆栈指针指向所述函数的栈帧,根据所述函数的栈帧及所述偏移值,得到所述函数的返回地址。
本发明的实施例提供一种确定函数调用关系的系统,包括用户接口和上述的确定函数调用关系的装置,所述确定函数调用关系的装置用于通过所述用户接口接收用户的函数调用命令,通过分析映射到内存的进程用户态代码段指令,追溯出函数的返回地址和SP值。
由上述本发明的实施例提供的技术方案可以看出,从函数的当前代码段指令地址处开始向高地址方向搜索以及从代码段地址处开始向低地址方向搜索,通过双向追溯函数调用关系,从而准确的确定函数的栈帧,得到函数的返回地址,提高追溯函数调用关系的准确性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例确定函数调用关系的方法流程示意图;
图2为本发明另一实施例确定函数调用关系的方法流程示意图;
图3为本发明另一实施例确定函数调用关系的方法流程示意图;
图4为本发明另一实施例确定函数调用关系的方法流程示意图;
图5为本发明一实施例确定函数调用关系的方法中前向搜索应用流程示意图;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910261275.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:软管
- 下一篇:一种单控水龙头的预埋装置