共享库从文件结构上来讲,与共享对象没什么区别。Linux下,共享库就是普通的ELF共享对象。

1、共享库命名:

  libname.so.x.y.z :其中最前面使用前缀lib,中间是库的名字和后缀“so”。最后三个数字组成的是版本号。其中,“x”表示主版本号,“y”表示次版本号,"z"表示发布版本号。

2、SO-NAME:

  共享库主版本号与次版本号决定了一个共享库的接口。对于Linux系统来说,普遍采用一种叫做SO-NAME的命名机制来记录共享库依赖关系。每个共享库都有一个对应的"SO-NAME"。这个SO-NAME即为共享库的文件名去掉次版本号和发行版本号,保留主版本号。比如一个共享库为libfoo.so.2.6.1,那么它的SO-NAME为libfoo.so.2。在linux系统中,系统会为每个共享库在它所在目录创建一个跟SO-NAME相同的并且指向它的软链接。以SO-NAME创建的软链接会指向目录中主版本号相同、次版本号和发行版本号最新的共享库。

3、链接名

  当我们在编译使用共享库时,为了使用的简洁,比如链接一个libXXX.so.2.6.1共享库,只需要在编译相关命令中指定-lXXX即可。编译器会根据当前环境,在系统相关路径(往往由-L参数指定)查找最新版本"XXX"库。

  “XXX”又称为共享库链接名。不同类型的库可能会有同样的类型名。例如静态库libc.a与动态库libc.so.2.6.1。因而利用ld的-static参数时,“-lc”会查找到libc.a; 若使用-Bdynamic  “-lc”则会查找到libc.so.2.6.1。

4、共享库路径:

  一般一个系统中主要有3个存放共享库的路径。

a、/lib 这个位置主要存系统最关键和基础的共享库。比如动态链接器、c语言运行库等

b、/usr/lib 这个位置主要放一些非系统运行时所需关键库。

c、/usr/local/lib 这个目录位置放置一些与系统本身并不十分相关的库。

 

  

binary hacks读数笔记(共享库)的更多相关文章

  1. binary hacks读数笔记(readelf基本命令)

    一.首先对readelf常用的参数进行简单说明: readelf命令是Linux下的分析ELF文件的命令,这个命令在分析ELF文件格式时非常有用,下面以ELF格式可执行文件test为例详细介绍: 1. ...

  2. binary hacks读数笔记(ld 链接讲解 二)

    这块将介绍一下ld链接命令的具体使用.ld的作用:ld是GNU binutils工具集中的一个,是众多Linkers(链接器)的一种.完成的功能自然也就是链接器的基本功能:把各种目标文件和库文件链接起 ...

  3. binary hacks读数笔记(堆、栈 VMA的分布)

    一.首先看一个简单的程序: #include<stdlib.h> int main() { while(1) { sleep(1000); } return 0; } gcc -stati ...

  4. binary hacks读数笔记(dlopen、dlsym、dlerror、dlclose)

    1.dlopen是一个强大的库函数.该函数将打开一个动态库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.比如 Apache Web 服务器利用这个函数在运行过程中加载 ...

  5. binary hacks读数笔记(装载)

    1.地址空间 在linux系统中,每个进程拥有自己独立的虚拟地址空间,这个虚拟地址空间的大小是由计算机硬件决定的,具体地说,是由CPU的位数决定的.比如,32位硬件平台决定的虚拟地址空间大小:0--2 ...

  6. binary hacks读数笔记(ld 链接讲解 一)

    首先我们先看两段代码: a.c extern int shared; int main(){ int a=100; swap(&a,&shared); } b.c int shared ...

  7. binary hacks读数笔记(nm命令)

    nm命令(names):输出包含三个部分:1 符号值.默认显示十六进制,也可以指定: 2 符号类型.小写表示是本地符号,大写表示全局符号(external); 3 符号名称. 例如:nm Simple ...

  8. binary hacks读数笔记(readelf命令)

    可以用readelf命令来查看elf文件内容,跟objdump相比,这个命令更详细. 1. readelf -h SimpleSection.o ELF Header: Magic: 7f 45 4c ...

  9. binary hacks读数笔记(objdump命令)

    一.首先看一下几个常用参数的基本含义: objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍: 1.objdump -f ...

随机推荐

  1. linux centos 04

    1.python的虚拟环境 1.将当前机器上的解释器作为一个 本地,复制出的很多歌 虚拟解释器 物理机上的 本体解释器 ,什么事也不做 分身1:  解释器1:虚拟环境1     运行django  1 ...

  2. boost之multiprecision

    multiprecision boost中提供的高精度库,支持高精度整型,浮点型等.并且提供统一的接口模板,只需要指定对应的后端类型即可实现对应类型的高精度计算: boost::multiprecis ...

  3. 扫描仪扫描文件处理-图像扫描加工到生成PDF步骤简述[JAVA版]

    另参见:https://www.cnblogs.com/whycnblogs/p/8034276.html 详细见:https://github.com/barrer/scan-helper 用途: ...

  4. 互不侵犯(洛谷P1896)

    题目:在N*N的棋盘里面放k个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入输出:输入N,K,输出有几种放置方法. ...

  5. centos8平台redis cluster集群添加/删除node节点(redis5.0.7)

    一,当前redis cluster的node情况: 我们的添加删除等操作都是以这个cluster作为demo cluster采用六台redis,3主3从 redis1 : ip: 172.17.0.2 ...

  6. 第十四章 Linux三剑客之老大—awk

    一.awk # 擅长取列 计算 数组 函数 编程语言 内部命令 内部变量 NR #行号 $0 #完整的一行内容 $n # n 是数字 表示取出第几列 多列用逗号分割 -F  #FS 分隔符的变量 NF ...

  7. 假如 Web 当初不支持动态化

    楔子 Web 生而具有极其灵活的动态化基础能力,诸如: 动态插入script标签执行任意脚本逻辑 动态插入style标签引入任何 CSS 样式规则 通过iframe标签嵌入整站 以上标签均可直接加载网 ...

  8. 不同系统执行相同shell脚本,出现Syntax error: "(" unexpected错误解决

    例如shell脚本在centos系统中能正常执行,而在ubuntu系统中执行会出现类似Syntax error: "(" unexpected的错误,一般这种是因为sh与bash有 ...

  9. plsql查询中文乱码

    1.查看数据库字符集 select userenv('language') from dual 查看数据库字符集 2.在环境变量中添加并设置变量 变量名:NLS_LANG: 变量值:第一步查询的数据库 ...

  10. CSS动画菜鸡记录板

    Transition 过渡属性: (background 1s linear 0s) 缓动函数 linear,在 easings.net 可找到相应的功能 若想要多次不同执行,用逗号隔开 Animat ...