ELF文件格式概述(三):静态链接

October 13, 2016 at 8:58 pm

最近忙着搞毕设和玩ED6,所以好像再一次好久没有更新了。本来今天也是应该全心全意搞毕设的,不过开发环境的搭建似乎异常地耗时,所以干脆就先利用这部分时间来继续ELF的篇章了。事实上之前的loader并不需要链接这样高大上的内容,不过从全面了解ELF文件的角度来看,讨论链接相关的问题仍然是相当有必要的。不出意外的话本篇只讨论静态链接的过程。 本文分为如下几个部分: 1. 链接时的符号解析 2. 重定位表 3. 相似段合并 4. 静态库链接 链接时的符号解析 首先我们假设有这样两个文件a.c和b.c,内容如下所示: /* a. c */ extern int shared; int […]

ELF文件格式概述(二):section header table

September 25, 2016 at 8:03 pm

那么继续上一篇的话题,我们开始研究section header table。本篇主要有如下小节: 1. section header table 2. string table 3. symbol table 4. 代码段 5. 数据段 section header table […]

ELF文件格式概述(一):ELF header

September 24, 2016 at 12:30 pm

无锁系列似乎比想象中要难产阿,主要是最近还有很多事要干,这周内尽量将第4篇更新出来吧。 今天打算对ELF文件格式进行一个整理。第一次接触到ELF文件格式是在于渊的《自己动手写操作系统》里,在这本书里ELF文件格式并不做为一个重点讨论的对象,当时对这部分内容确实也做了一些笔记,但是内容还是偏少;第二次接触ELF则是在《程序员的自我修养--链接、装载于库》中,这本书对于ELF文件格式的结构还是有比较详细的介绍的。 之所以要重新整理这部分的内容,是因为,最近有个地方需要用到一个ELF文件格式的loader,所以需要对这个文件格式进行进一步的了解。本文主要还是一些属于偏陈述性的东西,大概可以称为半技术文。早前在某个网站上看到过一篇对ELF介绍得非常深入的文章(那篇文章的作者应该是做偏硬件的),但是现在找不到了。无论如何,本文将对ELF相关的知识进行重新整理,主要参考上面提到的两本书籍。 本文主要由如下几个小节构成: 1. ELF文件概述 2. ELF header ELF文件概述 ELF(Executable and Linkable Format)文件格式是COFF(Common Object File Format, 通用目标文件格式)的一个变种,广泛使用在unix/linux环境下。在这些环境下,它主要用来表示可执行文件、可重定位文件、共享目标文件和核心转储文件。我们重点关注前面两种形式的文件。 按照我们对可执行文件的理解,里面应当包含代码段、数据段,以进行程序的载入,下面我们通过一个示例来看一下ELF文件格式的概貌: // […]