资讯详情

深入理解LINUX下动态库链接器/加载器ld-linux.so.2

【ld-linux-x86-64.so.2】

最近在Linux 开发环境已经好几天了 Compiler 和 linker,我觉得有必要写一篇关于它的文章Linux环境下 ld.so的文章了,google搜索了很多相关的介绍性文档,发现国内百度相关文档很少,觉得有必要梳理一下:

ld-linux.so.2 是linux本文主要讨论动态库加载器/链接器 ld-linux.so.2 是如何和Linux 处理相关应用。

1. 什么是 ld.linux.so ?

当一个 需要动态链接 操作系统加载应用时,系统必须 定位 然后 加载所需的所有动态库文件。 在Linux这项工作是由环境造成的ld-linux.so.2.我们可以通过 ldd 命令查看一个 应用程序需要依赖哪些动态库:

$ ldd `which ls`

linux-gate.so.1 => (0xb7fff000)

librt.so.1 => /lib/librt.so.1 (0x00b98000)

libacl.so.1 => /lib/libacl.so.1 (0x00769000)

libselinux.so.1 => /lib/libselinux.so.1 (0x00642000)

libc.so.6 => /lib/libc.so.6 (0x007b2000)

libpthread.so.0 => /lib/libpthread.so.0 (0x00920000)

/lib/ld-linux.so.2 (0x00795000)

libattr.so.1 => /lib/libattr.so.1 (0x00762000)

libdl.so.2 => /lib/libdl.so.2 (0x0091a000)

libsepol.so.1 => /lib/libsepol.so.1 (0x0065b000)

当最常见的ls加载小程序时,操作系统会 控制权 交给 ld-linux.so 而不是 交付程序正常进入地址。 ld-linux.so.2 查找并加载所有所需的库文件,然后将控制权交给应用程序的起始入口。

上面的ls需要启动ld-linux.so加载器加载所有动态库,然后移交控制权ls程序入口。

ld-linux.so.2 man page给我们更高层次的全局介绍, 它是在 链接器(通常是ld)将运行状态下的零件定位并加载到应用程序的运行地址(或运行内存)中。通常,动态链接是 在连接阶段 隐式指定。 gcc -W1 options -L/path/included -lxxx 会将 options 传递到ld 然后指定相应的动态库加载。 ELF 文件提供相应的加载信息, GCC包含一个特殊的 ELF 头: INTERP, 这个 INTERP指定了 我们可以使用加载器的路径readelf 查看相应的程序

$ readelf -l a.out

Elf file type is EXEC (Executable file)

Entry point 0x8048310

There are 9 program headers, starting at offset 52

Program Headers:

Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align

PHDR 0x000034 0x08048034 0x08048034 0x00120 0x00120 R E 0x4

INTERP 0x000154 0x08048154 0x08048154 0x00013 0x00013 R 0x1

[Requesting program interpreter: /lib/ld-linux.so.2]

LOAD 0x000000 0x08048000 0x08048000 0x004cc 0x004cc R E 0x1000

LOAD 0x000f0c 0x08049f0c 0x08049f0c 0x0010c 0x00110 RW 0x1000

. . .

ELF 假设规格要求 PT_INTERP 存在的话,操作系统必须创建这个 interpreter文件的运行映射,而不是程序本身, 控制权会给这个interpreter,用于定位和加载所有动态库,

[深入理解LINUX下动态库链接器/加载器ld-linux.so.2 - elfprincexu的专栏 - CSDN博客 ](https://blog.csdn.net/elfprincexu/article/details/51701242)

标签: f0r连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台