制作Dockefile和发行安装包的时候,经常需要查找一个elf程序的链接库,并且安装相应的库。
当链接库比较多,并且版本要求比较严格的时候,这是一个不容易完成的任务。
ldd是个很多人都知道的工具,但是ldd不能跨平台使用。
readelf可以跨平台使用,但是貌似不是递归查找。
最近找到一个好用的工具,就是pax-utils包中的scanelf,这个包可以递归查找多个动态库依赖,并且支持跨平台的包。
进一步的,pax-utils还封装了一个脚本,lddtree,可以将动态库依赖的树形结构打出来。
追踪scanelf的来源和原理的时候,发现它源自grsecuriy这个项目,主要是一些内核安全补丁。
因为某些不太愉快的原因,这些安全补丁不能被合入主线内核。
进一步的挖掘追踪,可以看到selinux的一些内容,跟这个项目有些类似吧,可以做一些应用程序安全控制。
不管怎么说吧,熟悉一个系统,了解一些安全方面的知识是很有必要的。