ELF文件系列
广敏
程序写出来是给人看的
展开
-
ELF文件系列第一篇ELF文件的静态结构概述
前言在看uboot编译过程时发现最终生成u-boot.bin文件时生成了一个ELF格式的中间文件u-boot,后来对ELF文件了解了一下后发现平时用的对象文件、可执行文件和库文件都是ELF格式的。考虑到平时一直在使用这些文件却对他们知之甚少,因此从这里开始系统学习一下ELF文件格式。UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link ed...原创 2018-12-06 17:55:28 · 803 阅读 · 0 评论 -
ELF文件系列第二篇ELF文件静态结构中的文件头
ELF文件头表示文件头中含有整个文件的结构信息,包括一些控制单元的大小。可以用以下这个数据结构体来描述文件头:#define EI_NIDENT 16typedef struct { unsigned char e_ident[EI_NIDENT]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word ...原创 2018-12-06 18:03:00 · 712 阅读 · 0 评论 -
ELF文件系列第三篇ELF文件静态结构中的节
节概述在ELF文件中可以包含很多“节”(section),所有这些“节”都记录在一张称为“节头表”(section header table)的数组里。节头表的每一个表项是一个 Elf32_Shdr 结构,通过每一个表项可以定位到对应的节。在 ELF 文件头中, e_shoff 成员给出节头表在 ELF 文件中相对于文件开始处的偏移量;e_shnum 成员指明节头表中包含多少个表项;e_s...原创 2018-12-10 12:22:48 · 2898 阅读 · 0 评论 -
ELF文件系列第四篇ELF文件静态结构中的字符串表和符号表
默认字符串表这节描述默认字符串表。字符串表中包含有若干个以’null’结尾的字符串。在ELF文件中,这些字符串通常是符号的名字或者节的名字。当ELF文件的其它部分需要引用某个字符串时,只需要提供该字符串在字符串表中的序号即可。字符串表中的第一个字符串(序号为 0)永远是”null”,它用于表示一个空的名字或者没有名字。所以,字符串表的第一个字节是’null’。字符串表也可以是空的,不含有任...原创 2018-12-11 10:37:57 · 3300 阅读 · 0 评论 -
ELF文件系列第五篇ELF文件静态结构中的重定位项
重定位重定位(relocation)是把符号引用与符号定义连接在一起的过程。当程序调用一个函数时,将从当前运行的指令跳转到一个新的指令地址去执行。在编写程序的时候,只需指明所要调用的函数名(即符号引用),在重定位的过程中,函数名会与实际的函数所在地址(即符号定义)联系起来,使程序知道应该跳转到哪里去。重定位文件必须知道如何修改其所包含的“节”的内容,在构建可执行文件或共享目标文件的时候,把...原创 2018-12-12 09:03:52 · 2525 阅读 · 0 评论 -
ELF文件系列第六篇ELF文件运行视图相关结构
介绍这节首先描述程序头的格式和运行程序相关的ELF文件结构,然后是程序的装载过程。程序头可以算是程序结构的一个总纲,它指明了文件中各个段的位置,还包含一些用于创建内存镜像的必要内容。准备一个程序的内存镜像,可以大体上分为装载和连接两个步骤。前者把目标文件装载入内存,后者解析目标文件中的符号引用。一个已装载完成的进程空间会包含多个不同的“段(segment)”,比如代码段(text segmen...原创 2018-12-24 17:38:03 · 1700 阅读 · 2 评论 -
静态库的格式
The ar format has never been standardized; modern archives are based on a common format with two known variants, BSD and GNU.原创 2019-01-10 13:44:13 · 1130 阅读 · 0 评论