[发明专利]一种Linux系统上动态链接库可视化依赖树的生成方法有效
申请号: | 202211552765.7 | 申请日: | 2022-12-06 |
公开(公告)号: | CN115543294B | 公开(公告)日: | 2023-03-17 |
发明(设计)人: | 李婷;魏炯超;张赛丹;吕沙 | 申请(专利权)人: | 麒麟软件有限公司 |
主分类号: | G06F8/34 | 分类号: | G06F8/34;G06F8/41 |
代理公司: | 北京汇智英财专利代理有限公司 11301 | 代理人: | 陈雅静 |
地址: | 300450 天津市滨海新区*** | 国省代码: | 天津;12 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 linux 系统 动态 链接 可视化 依赖 生成 方法 | ||
1.一种Linux系统上动态链接库可视化依赖树的生成方法,其特征在于,包括如下步骤:
S1、编写脚本程序,执行脚本程序中的generate_input函数,生成C程序的输入文件result.output,输入文件result.output存储有应用程序的依赖库合集;
S2、将输入文件result.output输入二进制执行程序elf_parser进行分析,生成C程序的输出文件library.dot;
S3、执行脚本程序中的 handle_output 函数,解析输出文件library.dot,最终画出依赖树结构图;
步骤S2中,二进制执行程序elf_parser执行如下分析:
S21、解析并检测输入文件result.output合法后,将输入文件result.output中所有依赖库的库名、初始绝对路径 libpath、当前层级level存入consumed队列;
S22、循环解析consumed队列:遍历consumed队列中的内容,判断consumed队列是否为空,若consumed队列不为空,执行步骤S23,否则执行步骤S27;
S23、当前依赖库的初始绝对路径libpath存在的情况下,加载该依赖库,并判断该依赖库是否为64位的elf文件,若是64位的elf文件,执行步骤S24,否则返回步骤S22;
S24、解析elf文件中的DT_NEEDED字段,DT_NEEDED字段用以表示依赖库上声明的依赖项,在初始绝对路径libpath的基础上,找到这个依赖库在系统中的最终绝对路径newpath,将该依赖库的当前层级level的数值加一,表示依赖库加深了一个层次;并将该依赖库的最终绝对路径newpath与新的当前层级level 一起存入consumed队列;同时记录该依赖库的被引用次数,将被引用次数加一,存入counthash哈希表;
S25、调取用于保存依赖库的层次信息的levelhash表,判断是否需要将初始绝对路径libpath和新的当前层级level插入levelhash表中,若需要,执行步骤S26,否则执行步骤S27;
S26、将初始绝对路径 libpath和新的当前层级level存入levelhash表,并保存.dot结构的文件,然后返回步骤S22;
S27、遍历counthash哈希表,将库名与被引用次数写到输出文件count.record;
S28、结束程序。
2.根据权利要求1所述的一种Linux系统上动态链接库可视化依赖树的生成方法,其特征在于,步骤S1中,脚本程序为shell脚本程序。
3.根据权利要求1所述的一种Linux系统上动态链接库可视化依赖树的生成方法,其特征在于,步骤S23中,当前依赖库的初始绝对路径libpath存在,加载该依赖库,是指:调用mmap 映射到内存空间以弹出consumed队列;
判断该依赖库是否为64位的elf文件,是指:解析 elf文件头结构 e_ident[16]的数据,若e_ident[16]的第五个字节等于2,则该依赖库是64位的elf文件,反之则不是。
4.根据权利要求1所述的一种Linux系统上动态链接库可视化依赖树的生成方法,其特征在于,步骤S24中,二进制执行程序elf_parser还可以解析单个依赖库。
5.根据权利要求4所述的一种Linux系统上动态链接库可视化依赖树的生成方法,其特征在于,对于单个依赖库,通过-l参数来解析单个依赖库。
6.根据权利要求1所述的一种Linux系统上动态链接库可视化依赖树的生成方法,其特征在于,步骤S25中,判断是否需要将初始绝对路径libpath 和新的当前层级level插入levelhash表,是指:
如果levelhash表中不存在该依赖库的层级记录或者该依赖库的层级低于待插入的依赖库的层级level,则将初始绝对路径libpath 和新的当前层级level存入levelhash表中,否则忽略这个待插入的依赖库。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于麒麟软件有限公司,未经麒麟软件有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211552765.7/1.html,转载请声明来源钻瓜专利网。