今天开始看《程序员的自我修养:链接、装载与库》,对ELF文件格式内容进行一下总结,主要分析全局变量,静态变量以及局部变量存放位置。
ELF文件有很多种:可重定位文件(如静态库),可执行文件,共享文件(动态库),核心转储文件(Core dump file)。
ELF文件主要有以下段:
file header
.text section
.data section
.bss section
这里主要分析以下每个字段的内容。
file header字段里存放了描述整个文件的基本属性信息的内容,如程序入口地址,其他各段信息(偏移量和范围)
.text section:主要是编译后的源码指令,是只读字段。
.data section :初始化后的非const的全局变量变量或者局部static变量。
.bss:未初始化后的非const全局变量和局部static变量。
另外,还有一些其他字段:如.rodata字段和.comment字段分别存放只读数据和注释部分。
用书上提供的例子做测试:
#include <stdio.h>
int global_init_val = 84;//.data
int global_uninit_val;
char b[]="aaa";//.data
char c[]="dddd";//.data
const char e[]="yyyy";//g++:not found gcc:.ro