共享库从文件结构上来讲,与共享对象没什么区别。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. 迅雷bt种子的制作

    BT是目前最热门的下载方式之一,它的全称为"BitTorrent"简称"BT",中文全称"比特流",但很多朋友将它戏称为"变态下载 ...

  2. 多测师讲解自动化测试 _pybot.bat批处理脚本_高级讲师肖sir

  3. 面经手册 · 第13篇《除了JDK、CGLIB,还有3种类代理方式?面试又卡住!》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 编程学习,先铺宽度还是挖深度? 其实技术宽度与技术深度是相辅相成的,你能了解多少技术 ...

  4. 【Jenkins】active choices reactive parameter & Groovy Postbuild插件使用!

    注:以上俩插件安装下载直接去jenkins官网或者百度下载即可 一.active choices reactive parameter 插件的使用 1.被关联的参数不做改动 2.添加active ch ...

  5. 【数论】HDU 4143 A Simple Problem

    题目内容 给出一个正整数\(n\),找到最小的正整数\(x\),使之能找到一个整数\(y\),满足\(y^2=n+x^2\). 输入格式 第一行是数据组数\(T\),每组数据有一个整数\(n\). 输 ...

  6. kafka+zookeeper快速启动

    vim zookeeper.sh   #!/bin/bash /usr/local/zookeeper/bin/zkServer.sh restart /usr/local/zookeeper/con ...

  7. nginx配置laravel lumen重写

    location / { try_files $uri $uri/ /index.php?$query_string;}

  8. docker-docker-compose 安装

    1.安装docker-compose(官网:https://github.com/docker/compose/releases) 安装: curl -L https://github.com/doc ...

  9. 线程池SingleThreadPool

    只有一个核心线程,当被占用时,其他的任务需要进入队列等待 public class MainActivity extends AppCompatActivity { @Override protect ...

  10. Vue.js 获得兄弟元素,子元素,父元素(DOM操作)

    e.target 是你当前点击的元素 e.currentTarget 是你绑定事件的元素 e.currentTarget.previousElementSibling.innerHTML 获得点击元素 ...