1.动态库(Linux叫共享目标文件)和普通的可执行程序(EXEC)有什么
普通的程序有main函数,存在操作系统可以进入的入口,可独立运行 但是库文件没有main函数,只能在有main函数的程序中调用运行,不可独立运行
这是我们写的add.c文件 编译成动态库 -d
# 编译动态库
gcc -d add.c -o libadd.so
# 查看动态库
readelf -a libadd.so
程序头:动态库文件也是可执行文件,需要放到内存上运行的,所以程序头即给出加载的地址,虚拟地址与物理地址的映射
某偏移量的dynamic section的入口如下:
查看反汇编后的内容:
objdump -d libadd.so
查看本可执行文件需要哪些动态库
gcc add.c -o 1.out
ldd 1.out #查看调用的链接库
哈希查找表:当项目很大时,库文件很多,用哈希查找可以提速 内部还用到了布隆过滤器bloom_filter,当库很多时,可以更快确定哪些库不在我们要找的范围里