[发明专利]基于寄存器传输语言确定动态函数调用关系的方法有效
申请号: | 201410015881.4 | 申请日: | 2014-01-14 |
公开(公告)号: | CN103761089B | 公开(公告)日: | 2017-09-15 |
发明(设计)人: | 向勇;汤卫东;杜香燕;孙卫真;马东超;邓雪峰 | 申请(专利权)人: | 清华大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 北京中伟智信专利商标代理事务所11325 | 代理人: | 张岱 |
地址: | 100084*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 寄存器 传输 语言 确定 动态 函数 调用 关系 方法 | ||
1.一种基于寄存器传输语言确定动态函数调用关系的方法,其特征在于:
所述方法包括:
在系统运行过程中检测函数调用执行事件,
若检测到调用指令后,解析该指令调用的函数入口地址对应的函数名,统计指令次数,输出函数名、调用发生时间、所属进程号、所属线程号、所属栈顶指针以及模块号,并保存到跟踪数据文件;
若检测的指令是返回指令后,输出时间、所属进程号、所属线程号以及所属栈顶指针到跟踪数据文件;
对所述跟踪数据文件进行处理获得预定标准的数据格式,将处理后的跟踪数据文件传输至静态函数调用关系生成装置中,生成描述函数调用关系的动态函数调用图。
2.根据权利要求1所述的基于寄存器传输语言确定动态函数调用关系的方法,其特征在于:所述跟踪数据文件的生成方法包括:
通过对目标文件的解析获取函数入口地址对应的函数名、函数所在文件及行号的列表;
解析操作系统内核符号表,获取函数入口地址和函数名,根据地址和函数名查找获取的函数所在文件及行号补全函数信息,并记录到函数列表数组中;
读取模块符号表,获取模块的函数符号表,并记录到模块函数列表数组中;
若给定的地址在函数列表数组中找到,则返回模块名和函数名;
若给定的地址在模块函数列表数组中找到,则返回系统的模块名和函数名;
若给定的地址在所述函数列表数组和所述模块函数列表数组均找不到,则判断函数是否在内存中存在,
若在内存中存在,则从内存中读取内存地址,在此地址之后依次读取符号地址判断与需查询地址是否一致,并记录内存位置,从记录位置读取内存信息为函数名索引地址,若查到则根据索引地址和符号地址起始地址读取符号名长度,计算出所查地址的偏移,获取函数名长度,进而返回函数名;
若在内存中不存在,则在加载模块的符号表中读取相应的函数名,从模块中读取内存地址,通过模块地址获取模块的函数名。
3.根据权利要求1所述的基于寄存器传输语言确定动态函数调用关系的方法,其特征在于:对记录的跟踪数据文件补充函数调用关系并转化标准格式,将数据上传至静态函数调用关系生成装置,
其中所述补充函数调用关系包括:根据调用和返回的进程号、线程号以及栈顶指针来把函数的调用和返回进行配对,同时获取函数的执行时间,同时把数据转化为标准格式;
所述数据上传至静态函数调用关系生成装置包括:
按FROM字段提供的目录和文件名,把记录分别复制到相应源代码文件的动态函数调用关系文件中;
按照每个动态函数调用关系文件中的TO字段判断该函数调用是否源自该文件,
若不是该文件的则写入到对应源代码文件的动态函数对外调用关系文件,同时判断该文件是否源自该目录,若不是写入到对应目录的动态函数对外调用关系文件;
根据最后一层目录的动态函数对外调用关系文件逐层返回上一级目录填写上一级目录的动态函数对外调用关系文件。
4.根据权利要求1所述的基于寄存器传输语言确定动态函数调用关系的方法,其特征在于:所述方法还包括显示所述函数调用关系图的步骤,以及对已生成的函数调用关系图和列表进行缓存的步骤。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410015881.4/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种防水外墙板
- 下一篇:一种人造洞石保温装饰一体板