ld

ld-linux.so.2是链接器(linker)(ld)的运行时组件, 它定位应用程序使用的动态库并将其加载到内存中

Elf 文件里面有 segment ,有 section 。我们知道执行的时候,所有的应用程序都是首先通过加载器 ld.so 加载到内存然后执行的(内部集成了加载器的除外),而所有的 elf 文件也都是经过了链接的过程形成的。 Segment 就是提供信息给 ld.so 这个加载器信息,告诉他怎么加载的,而 section 就是提供给 ld 程序,告诉他怎么链接的。其实 section 本质上就是个记录的作用, elf 没有它也完全可以正常工作,因为 segment 已经提供了工作所需要的信息。但是 section 是 ld 链接的时候的工作过程,记录了将不同的内容放到不同的文件位置的分布, section 表就是这个分布的一个总体描述。 section 的最大意义在于让 elf 有语义的意义,没有 section 只有 segment 的话, elf 就只是个可以执行的文件,别人没办法分析他的组成,分析他的二进制格式。缺少了二进制层次上的语义,也正因为反正都决定要在二进制文件中保留 section 了,那么有的 segment 也就可以用 section 来组织。毕竟可执行文件的物理组装是通过 section 完成的,而 segment 也要告诉 ld.so 怎么使用这个物理文件,所以两者发生交互就会方便很多。而现在的很多 section 在运行期间也是有用的,例如 .text, .got 可以用来找到动态库的符号。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近跟同学讨论c++在编译时g++ -L.. 和LD_LIBRARY_PATH的问题,今天在做一个东西的时候发现,...
    HHFCodeRv阅读 424评论 0 0
  • 本文主要是《程序员的自我修养》学习笔记,并着重阐述了程序启动的流程及Mac相关的知识点; 一、简介 程序内存通过分...
    FengyunSky阅读 1,015评论 0 0
  • 如何用命令行工具审查二进制文件 引言 相像一下你手头有一个可执行的二进制文件,只要你运行它电脑就会立刻爆炸。聪明的...
    jagttt阅读 4,698评论 2 34
  • 关于程序是否是从 main 函数开始运行的疑问,可以参照 运行库[https://www.jianshu.com/...
    奉灬孝阅读 2,653评论 1 16
  • Mach-O探索 前言 我们都知道在iOS应用程序中的可执行文件的格式是Mach-O,那么Mach-O到底存储了哪...
    just东东阅读 866评论 3 2