[发明专利]基于文件的Linux基础软件依赖关系分析方法有效
申请号: | 201410291217.2 | 申请日: | 2014-06-25 |
公开(公告)号: | CN104063220B | 公开(公告)日: | 2017-04-12 |
发明(设计)人: | 陶品;冯立新 | 申请(专利权)人: | 清华大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F17/30 |
代理公司: | 北京华睿卓成知识产权代理事务所(普通合伙)11436 | 代理人: | 张丽新,彭武 |
地址: | 100084*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 文件 linux 基础 软件 依赖 关系 分析 方法 | ||
技术领域
本发明总体地涉及Linux系统,更具体地涉及Linux基础软件依赖关系分析方法。
背景技术
一个典型的Linux系统中包含数以千计的软件包,数以万计的可执行文件,如果每个软件的功能实现都从Linux最底层的系统调用开始构建,软件的设计会异常复杂、工作量很大,因此实际的Linux软件系统中都包含各种面向不同目标的软件库。Linux系统中这些软件包的二进制可执行文件与库文件之间存在互相依赖关系,不同的软件由不同的开发者或开发团队进行开发,为了使得软件开发更加高效,软件的开发者会根据自己的知识和软件开发效率的考虑,使得一些软件的功能可以通过调用其他软件库的API调用来实现,从而让整个Linux系统的软件呈现出一种复杂的积木式结构,即每个软件功能都不是很大,但通过复杂的组合形成一个较为复杂、较为完备的应用系统。
传统的Linux系统采用包管理的方式来组织管理Linux系统中复杂的软件结构,每个软件包中都包含一个描述文件来表述该软件包依赖哪些其他软件包,比如RPM包管理系统等,这样的设计使得Linux系统的使用和管理较为方便。不过包管理系统中的软件包依赖关系描述文件是由富有经验的Linux系统开发人员手工指定的,不能自动化的生成软件的依赖关系图,也不能用于Linux系统开发的结构分析和Linux系统的安全性分析。。
发明内容
鉴于现有技术的以上情况,提出了本发明。
根据本发明的一个方面,提出了一种用于分析Linux基础软件之间的依赖关系的Linux基础软件依赖关系分析方法,可以包括:
步骤1:扫描一个Linux系统,得到所有二进制可执行文件和库文件的列表;
步骤2:获得该列表中的文件之间的依赖关系;
步骤3:消除二进制文件的循环依赖关系,构建集合{X},其中集合{X}由彼此之间不存在循环依赖关系的元素组成,元素X为由处于一个循环依赖链上的所有文件构成的集合或者由不存在于任何一个循环依赖链中的单个文件构成的集合;
步骤4:对集合{X}中的每个元素,依据步骤2获得的文件之间的依赖关系,建立元素之间的依赖关系,如果一个元素中存在多个文件与另一个元素中的多个文件存在依赖关系,两个元素之间只记为一个依赖关系,集合{X}中各元素的依赖关系是一个内部不存在循环依赖的树状依赖关系图。
利用本发明实施例的Linux基础软件依赖关系分析方法,可以在无需软件包描述信息的情况下,直接获得Linux系统中内核之上的所有软件的二进制可执行文件和库文件之间的依赖关系。
根据本发明的另一方面,提供了一种用于分析Linux基础软件之间的依赖关系的Linux基础软件依赖关系分析方法,可以包括:
步骤1:扫描一个Linux系统中,得到所有二进制可执行文件和库文件的列表;
步骤2:逐个分析每个二进制可执行文件和库文件的函数调用关系,获得该文件所依赖的其他二进制可执行文件和库文件的集合;
步骤3:对上述集合中的每个被依赖的二进制文件,建立一个从被分析的二进制文件到集合中被依赖的该二进制文件的有向依赖连接;
步骤4:检查Linux系统中的所有二进制文件是否都被分析过,如果还有没有被分析的二进制文件,回到步骤2;否则进入步骤5;
步骤5:查找系统二进制文件的循环依赖关系,对于找到的每个循环依赖关系,处于循环依赖链上的所有文件构成一个集合,记为集合Xi,i=0...M-1,M表示整个系统中没有重叠的循环依赖链个数;其他不存在于任何一个循环依赖链中的文件被记为只有一个元素的集合Xj,j=M...M+N-1,N表示系统中不在任何一个循环依赖链中的文件个数;由所有的Xi和Xj构成一个新的集合{X},该集合的大小为N+M;
步骤6:对集合{X}中的每个元素,依据步骤2到步骤4获得的文件之间的依赖关系,建立元素之间的依赖关系,如果一个元素中存在多个文件与另一个元素中的多个文件存在依赖关系,两个元素之间只记为一个依赖关系,集合{X}中各元素的依赖关系是一个内部不存在循环依赖的树状依赖关系图;
步骤7:初始化集合{X}中每个元素对应的计数器A和计数器B值均为0。计数器A的值表示该二进制文件被其他文件依赖的次数,计数器B的值表示该二进制文件一共依赖多少个其他二进制文件;
步骤8:逐个处理集合{X}中的每个元素,如果该元素依赖其他某个元素,则被依赖的元素(即所述的其他某个元素)所对应的计数器A执行加一操作,该元素对应的计数器B值等于该元素依赖的其他元素的总个数;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410291217.2/2.html,转载请声明来源钻瓜专利网。