[发明专利]一种分析Linux内核动态执行的方法无效
| 申请号: | 201110151167.4 | 申请日: | 2011-06-02 |
| 公开(公告)号: | CN102810078A | 公开(公告)日: | 2012-12-05 |
| 发明(设计)人: | 周庆国;边立军;金国军;盛勇;孙彦猛;杨红刚 | 申请(专利权)人: | 兰州大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F21/00 |
| 代理公司: | 兰州振华专利代理有限责任公司 62102 | 代理人: | 张晋 |
| 地址: | 730000 *** | 国省代码: | 甘肃;62 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 分析 linux 内核 动态 执行 方法 | ||
1.一种分析Linux内核动态执行的方法,其特征是:
将开源程序strace通过程序进行扩展,经扩展后的strace在原来的基础上自动的对拟分析项目中的每一个可执行文件进行追踪,同时过滤出相应的被追踪的可执行文件在执行过程中的系统调用,将过滤出的系统调用给予一个新命名单独保存在与该可执行文件相对应的另外建立的新文件中;将开源程序的KFT功能通过程序进行扩展,扩展后的KFT在原来的基础上可自动追踪每个系统调用所调用的内核函数,并自动对同一个文件中每个系统调用追踪100次,创建数据库,并在数据库的表1中保存KFT追踪结果,对结果的调用树去重,建立追踪结果和调用树的对应关系,在前述数据库的表2中保存,在KFT对所有系统调用追踪结束后,将当前配置下的函数映射地址保存在前述数据库的表3,将autoKFT执行时的系统环境信息保存在数据库的前述数据库的表4中;在编译过Linux源代码的目录下会生成tags文件,从数据库表1中取出前述步骤中KFT追踪到的内核函数,在tags中过滤这些内核函数以及内核函数定义、声明的内核文件,并在前述数据库的表5中保存这些内核函数名和对应的内核文件名;将开源程序gcov通过程序进行扩展,使扩展后的gcov在原来的基础上能得到内核c文件中函数的起始行的数、结束行的数以及执行覆盖率,以及内核C文件中语句块的起始、结束的行数和执行的次数,调用这些功能自动处理每一个内核文件的gcov结果,得到执行过程中用到的每一个内核文件中函数覆盖率,保存到前述数据库的表6中,得到调用过的每个内核文件中语句块的起始、终止行数、执行次数,将结果存在前述数据库的表7中,对这些内核文件预编译成汇编文件,将结果保存在前述数据库的表8中,将autogcov执行时的系统环境信息保存到前述数据库的表4中;最终在网页上显示:从数据库中的每个系统调用的名称,对每个系统调用的每次追踪读取执行时间,统计出最大、最小执行时间,计算出平均执行时间和时间方差,在网页上显示,每个系统调用链接显示追踪的结果,对每个系统调用显示调用树的个数,并链接显示调用树;调用树中的每个内核函数链接到定义该内核函数的文件,显示内容包括该文件中函数的覆盖率,以及每个语句的执行次数。
2.根据权利要求1所述的一种分析Linux内核动态执行的方法,其特征是采用shell脚本分别对strace、KFT、tags和gcov进行扩展,其中:
对strace的扩展是通过遍历得到被分析项目中的每一个可执行文件,使strace自动追踪被分析项目中的每一个可执行文件,并过滤出相应的被追踪的可执行文件在执行过程中的系统调用,将过滤出的系统调用给予一个新命名单独保存在与该可执行文件相对应的另外建立的新文件中;
使用循环的方式,使KFT自动追踪每个系统调用所调用的内核函数,并自动对同一个文件中每个系统调用追踪100次,同时在新建数据库的表1中保存追踪结果,对结果的调用树去重,建立保存追踪结果和调用树的对应关系并在新建立的数据库表2中保存,系统调用追踪结束后,在数据库表3中保存当前配置下的函数映射地址,将autoKFT执行时的系统环境信息保存在数据库的前述数据库的表4中;
编写autoctags从数据库中自动取出前述扩展后的KFT追踪到的内核函数,根据编译后内核目录下的tags文件,得到在此环境下函数定义的内核文件,并在数据库表5中保存定义这些内核文件的函数名和对应的内核文件;
修改了一些gcov的代码,能处理gcov得到的结果,使扩展后的gcov在原来的基础上得到内核c文件中函数的起始行的数、结束行的数以及执行覆盖率,以及内核C文件中语句块的起始、结束的行数以及执行的次数,再调用这些功能自动处理每一个内核文件的gcov结果,得到执行过程中用到的每一个内核文件中函数覆盖率保存在数据库表6中,将语句块的起始、终止行数、执行次数,将结果存在数据库表7中,内核文件编译成汇编格式保存在数据库表8中,执行时的系统环境信息保存到前述数据库的表4中。
使用cgi-bin的脚本实现网页。从数据库中读每个系统调用的名称,对每个系统调用的每次追踪读取执行时间,统计出最大、最小执行时间,计算出平均执行时间和时间方差。每次追踪,最大、最小执行时间都通过trace_id链接到一个新的网页界面,显示这次追踪的具体信息。对每个系统调用统计出调用树的个数,对每个调用树链接到一个新的界面,传递tree_id,在数据库中找到对应的trace_id,取出该trace_id的原始结果,使用’kd’功能转化成执行树的形式在网页上显示。执行树上的每一个内核函数链接到一个新的网页界面,通过传递内核函数的名称,在数据库中找到到该函数的定义文件,在通过该文件名在数据库中取出关于该内核文件的gcov结果,并在网页上显示。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于兰州大学,未经兰州大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110151167.4/1.html,转载请声明来源钻瓜专利网。
- 上一篇:制备筒状石墨加热器用固定棒及加热器的制造方法
- 下一篇:太阳能电池组件





