Linux 动态库格式详解

蒸汽
蒸汽
发布于 2025-03-19 / 10 阅读
0
0

Linux 动态库格式详解

1.动态库(Linux叫共享目标文件)和普通的可执行程序(EXEC)有什么

普通的程序有main函数,存在操作系统可以进入的入口,可独立运行 但是库文件没有main函数,只能在有main函数的程序中调用运行,不可独立运行

这是我们写的add.c文件 image.png 编译成动态库 -d

# 编译动态库
gcc -d add.c -o libadd.so
​
# 查看动态库
readelf -a libadd.so

image.png

image.png

程序头:动态库文件也是可执行文件,需要放到内存上运行的,所以程序头即给出加载的地址,虚拟地址与物理地址的映射 image.png

某偏移量的dynamic section的入口如下: image.png

查看反汇编后的内容:

objdump -d libadd.so

image.png

查看本可执行文件需要哪些动态库

gcc add.c -o 1.out
ldd 1.out #查看调用的链接库

image.png

哈希查找表:当项目很大时,库文件很多,用哈希查找可以提速 内部还用到了布隆过滤器bloom_filter,当库很多时,可以更快确定哪些库不在我们要找的范围里 image.png

image.png


评论