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 可以用来找到动态库的符号。

你可能感兴趣的:(ld)