原文来自SecIN社区—作者:tower
说明
在ctf中共享库的问题一直是一个非常非常非常恶心的问题,这里将会介绍动态链接库的命名以及如何修改一个程序依赖的动态链接库
命名
0x7f387805e000 0x7f3878091000 r-xp 33000 0 /lib/x86_64-linux-gnu/libseccomp.so.2.4.3
- lib表示库文件
- so表示动态链接
- 2.4.3中2表示主本号,4表示次版本,3表示发布版本
主版本是重大升级,不会向上兼容(如python2和3)
次版本是增量升级,添加一些新的接口
发布版本是进行一些错误修正,性能改进等
SO-NAME命名与软链接
用SO-NAME机制来记录共享库的依赖关系
每个库都有自己的SO-NAME知名库名字和主版本号如libc.so.2
SO-NAME相同的两个次版本号不同的库,次版本号大的兼容小的
在linux系统中,系统会为每个共享库在它所在的目录创建一个跟SO-NAME相同并且指向它的软连接如系统中存在共享库/lib/libfoo.so.2.6.1
那么linux共享库管理程序会为它创建一个指向它的软链接/lib/libfoo.so.2
也有一些不标准的命名,如libc.so.6 还有ld-2.6.1.so被命名为ld-linux.so