`

ld链接器

阅读更多

ld链接器其实是一个共享对象,但是也可以执行运行它。可见ELF可执行文件和共享对象本质没有差别。其实dll和exe文件也是如此。Windows的工具rundll32.exe可以执行dll文件。

其实系统执行execve()函数加载ELF文件并不关心是动态连接库还是可执行文件。系统将控制权交给e_entry。如果是没有.interp,则是elf文件的e_entry;如果有则是动态链接器的e_entry。因此动态链接器、可执行文件和普通的库文件都是类似的。

/lib/ld-linux.so.2 是实际的ld软链接的文件。

ELF的ld是glibc的一部分。代码位于glibc的源文件的elf目录下。其入口地址在 sysdeps/i386/dl-machine.h中的_start,普通程序的是sysdeps/i386/elf/start.S中的_start()。

_start()调用dl_start对ld进行自举(自己进行符号重定位),经过一些平台相关处理后,进入_dl_main这个ld的真正主函数。_dl_main判断调用入口地址是否是链接器本身的,以判断是否是当作可执行文件使用。如果入口函数不是本身,说明是要运行其他可执行文件,ld只是进行一些加载模块的工作的,其将会进行加载依赖模块的工作。

ld本身是静态链接的,因为没有其他可以帮他解决动态链接重定位问题,它必须是不依赖其他模块的。ldd /lib/ld-linux,so,2可以查看到。

ld-linux.so.2是fpic的,当然,是不是fPIC不是ld的关键。只是采用fpic更方便、简单。

ld.so的装载地址与普通的so没有区别,都是0x0000000,这个是无效的地址,内核会为它装载时选择一个合适的地址。

分享到:
评论

相关推荐

    ld中文手册

    ### ld连接器中文手册知识点概览 #### 一、引言 `ld`是一款由GNU项目开发的强大且灵活的连接器工具,主要用于将编译后的目标文件与库文件链接成可执行程序或共享库。该工具能够处理多种目标文件格式(如COFF、a.out...

    ld命令 GUN连接器

    ld命令是GNU的连接器,将目标文件连接为可执行程序。 很少单独使用ld命令对目标进行连接操作,通常都是使用gcc命令在编译后自动进行连接。 语法格式: ld [参数] 常用参数: -o 指定输出文件名 -e 指定程序的...

    GCC LD中文手册(完整版,附目录)

    GCC LD中文手册是一本详细的连接器手册,提供了 LD 命令行选项和连接脚本基本语法的讲解。下面是手册中的关键知识点: 一、LD 命令行选项 LD 命令行选项是连接器中最基本的选项,用于控制连接器的行为。连接器提供...

    GUN编译器和连接器

    连接器ld的主要任务是在编译器生成的一系列目标文件或静态库之间进行连接,形成一个完整的可执行程序。它的工作流程包括以下几个步骤: 1. **符号解析**:连接器首先处理输入的目标文件和库,查找并解决所有外部...

    gcc-ld中文翻译

    GNU 连接器 ld 是一个功能强大且灵活的连接器,可以处理大量的不同情况,并且跟其他的连接器保持尽可能的兼容。 概述 ld 把一定量的目标文件跟档案文件连接起来,并重定位它们的数据,连接符号引用。在编译一个...

    ld3320+stm原理图.rar_LD3320_LD3320语音识别_ld32原理_ld3320原理图_stm32硬件原理图

    本文将深入探讨LD3320语音识别芯片与STM32微控制器的硬件连接与交互,通过分析提供的“ld3320+stm原理图.rar”中的资料,来揭示两者如何协同工作,实现高效的语音识别功能。 首先,LD3320是一款专为低功耗语音识别...

    linux ld中文使用手册完全版.doc

    5. GNU 连接器的特点:GNU 连接器 ld 能够处理大量的不同情况,并且跟其他连接器保持尽可能的兼容。它提供了诊断信息,并且能够继续执行,以让用户发现其他的错误。 6. ld 的通用 BFD 库:ld 使用通用 BFD 库来操作...

    ld 命令使用详解 中文

    ld 命令是 GNU 连接器的一个组件,用于连接目标文件和档案文件,并重定位它们的数据,连接符号引用。ld 命令提供了大量的命令行选项,允许用户对连接过程进行控制。 概述 ------ ld 命令可以接受连接命令语言文件,...

    MELSEC-L LD75P,LD75D型定位模块用户手册

    2. 应使模块与各自的连接器紧密连接,滑动模块连接用挂钩直至停止位置,并将其牢固锁定。 3. 应在规定的扭矩范围内拧紧连接器安装螺栓。 配线注意事项 在进行MELSEC-L LD75P/LD75D型定位模块的配线时,务必注意...

    MSp430F5438操作LD3320

    本主题将详细探讨如何使用TI(德州仪器)的微控制器MSP430F5438与LD3320语音识别模块进行集成,实现一个有效的语音识别系统。 **MSP430F5438微控制器** MSP430F5438是TI公司推出的一款超低功耗16位微控制器,广泛...

    ld中文手册完全版(带目录).pdf

    连接器提供大量的命令行选项,用户可以根据需要选择不同的选项来控制链接过程。 连接脚本 ------------ 连接脚本是 ld 的一个重要组件,用户可以使用连接脚本来控制链接过程。连接脚本可以指定输出文件的格式、...

    ld中文使用说明

    GNU连接器ld设计时考虑了与其他连接器的兼容性,这意味着用户在迁移到ld时,可以尽量减少对现有连接配置的更改,从而降低了迁移成本。 #### 6. 通过编译器驱动的使用 当ld通过编译器(如gcc)间接调用时,所有连接...

    光模块 光纤连接器

    "光模块和光纤连接器" 光模块是指将光电子器件、功能电路和光接口组合在一起的模块,用于实现光信号的发送和接收。光模块可以分为不同的分类,按照速率分为以太网应用的 100Base(百兆)、1000Base(千兆)、10GE ...

    用GNU工具开发基于ARM的嵌入式系统.doc

    2. **LD连接器**:链接器将编译器生成的.o对象文件合并,处理符号引用,生成可执行文件或库。在ARM开发中,LD确保所有依赖项正确链接,并配置内存布局。 3. **GDB调试器**:GNU Debugger(GDB)是强大的源码级调试...

    GNU_LD使用手册

    GNU连接器`ld`是一个重要的工具,在软件开发领域中用于将编译后的多个目标文件(.o文件)与库文件进行链接,最终形成可执行文件或其他类型的目标文件。该工具不仅支持多种目标文件格式,如COFF或'a.out',还能在遇到...

    linux操作系统下C语言编程入门.doc

    在 Linux 操作系统下,程序库的链接可以使用 ld 连接器。例如,对于一个名为 libmytool.so 的库文件,可以使用以下命令链接:`gcc -o main main.o -lmytool`。 4. 程序的调试 在 Linux 操作系统下,程序的调试可以...

    LD 中文使用手册

    - 当通过编译器驱动程序(如GCC)间接调用连接器时,所有的连接器命令行选项前必须加上`-Wl`前缀。 通过以上内容,我们了解到GNU链接器ld的基本使用方法及高级特性,这对于软件开发人员来说是非常宝贵的资源。

Global site tag (gtag.js) - Google Analytics