链接库资料收集
编程常常使用链接库,不懂底层原理,网上查到的半吊子教程,对付个大作业还可以,变一个需求,立马就不一样.还是需要详细了解其原理.这里列出一些比较深层次的资源,供自己mark.
资料
原理篇
- 原理推荐《深入理解计算机系统》第七章.推荐自己买一本,应急的话可以用我的百度网盘:
链接: https://pan.baidu.com/s/1vkDgHGcOwnRIPW12_axUKw
密码: e3bi
工具篇
GNU Binutils是个非常不错的工具,他可以帮你查看/修改可执行程序或者链接库中的各个细节,比如里面的readelf
命令:
readelf ld-linux-x86-64.so.2 -s
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000ac0 0 SECTION LOCAL DEFAULT 12
2: 0000000000019200 8 FUNC GLOBAL DEFAULT 12 __get_cpu_features@@GLIBC_PRIVATE
3: 0000000000013540 21 FUNC GLOBAL DEFAULT 12 _dl_get_tls_static_info@@GLIBC_PRIVATE
给出详细各种命令的使用教程链接:
1. https://blog.csdn.net/zqixiao_09/article/details/50783007
2. https://zh.wikipedia.org/wiki/GNU_Binutils
注意事项
- 动态链接库的加载地址是系统管理的,而不是load到进程内部, 所以才叫shared library.
- 静态链接库的依赖关系必须和书写关系一致(依赖者在前,被依赖者在后)不然会出现undefined symbol.
- linux调用库的方式有三种:
- 静态链接库
- 动态链接库
- 动态加载库
近期评论