宋宝华:一个简单的python脚本画出Linux程序/库依赖图

点击蓝字

640?wx_fmt=gif

关注我们

继《宋宝华:一个简单的python脚本看透Linux程序对库的依赖》之后,作为一个python的初级用户,学习和实践python的步伐根本就不下来!


在下再接再厉,晚上继续写了一个python脚本,这个脚本完成的功能似乎比前面的分析函数依赖要cool一些,譬如执行

./libdep-pic.py /usr/lib/firefox/firefox

它会得到一个如下的效果图,把组件依赖描绘地一目了然:

640?wx_fmt=png


为什么需要这种依赖图?

1. 我们想不看源代码搞清楚各个组件的关系

2. 我们想分析某个软件有没有依赖GPL而非LGPL的库,如果我们想确保应用程序不GPL的话。


原理1:我们使用了Linux里面的dot绘图工具(没有的童鞋请apt install安装)。

假设1.dot文件存放了如下数据,

640?wx_fmt=png

下面的命令运行后:

$ dot -Tpng -o 1.png 1.dot

将得到一个1.png图片如下:

640?wx_fmt=png

上图中,a依赖于b,b依赖于c和d。


原理2:ldd工具,可以列出来elf文件所依赖的.so,以及.so依赖的.so

譬如:

640?wx_fmt=png

firefox依赖于libm.so.6等,如果我们对libm.so.6继续ldd,就可以分析出更深层次的依赖。所以,整个依赖图依赖于递归

640?wx_fmt=png


源代码

上述理论的基础上,完整源代码高亮后如下:


640?wx_fmt=png


今天写的两个小工具,我都已经提交到github,地址:

https://github.com/21cnbao/libdep/

Enjoy! 后期我会对代码进行优化,使它更加Pythonic!


希望你能够喜欢这两个小工具。


(欢迎打赏支持原创^-^)

640?wx_fmt=png


查看我们精华技术文章请移步:

Linux阅码场原创精华文章汇总

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值