一个python脚本看透Linux程序对库的依赖
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个python脚本看透Linux程序对库的依赖
在下今天写了一个小小的python程序,可以在完全不看源代码的情况下,分析a如果调用b.so的时候,会引用b.so的哪些函数,它的用法如下:
./symbol-dep.py-sa -db.so
把a作为-s参数,把b.so作为-d参数。
它的原理如下:
用nm -D --undefined-only命令可以列出一个程序依赖的需要动态链接的库函数,譬如:用nm -D --defined-only命令可以列出一个动态链接库给别人提供的函数,譬如:
我们只要把a依赖的函数,与b.so供给的函数中,求一个交集,即可在完全没有源代码的情况下,知道a会call到b.so的哪些函数。核心源代码如下(部分用了省略号方便阅读):#!/usr/bin/python3
import sys, getopt, os
def main(argv):
...
try:
opts, args = getopt.getopt(...)
except getopt.GetoptError:
...
for opt, arg in opts:
if opt == -h:
p...
elif opt in ("-s", "--sfile"):
srcfile = arg
elif opt in ("-d", "--dfile"):
dstfile = arg
# get the symbols srcfile depends on
src=os.popen("nm -D --undefined-only "+srcfile)
srclist=src.read().splitlines()