Chinaunix首页 | 论坛 | 博客
  • 博客访问: 156343
  • 博文数量: 39
  • 博客积分: 1395
  • 博客等级: 中尉
  • 技术积分: 413
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-26 15:07
文章分类

全部博文(39)

文章存档

2012年(5)

2011年(16)

2010年(14)

2009年(4)

我的朋友

分类: C/C++

2010-02-15 19:11:06

ELF 文件主要有以下三中类型

1 适于链接的可重定位文件(relocatable file)

    1. 通过gcc -c test.c test.o 得到的test.o 就是这种可重定位文件
    2. 可与其他目标文件一起创建可执行文件和共享目标文件
    3. 文件格式
                    
 ELF 头
 .text
 .rodata
 .data
 .bss
 .symtab
 .rel.text
 .rel.data
 .debug
 .line
 .strtab
 节头表

各个节的含义

 含义
.text
 已编译程序的机器代码,函数等被编译之后所对应的机器代码存放在此处
.rodata
 只读数据段,程序中的常量,及printf语句中的格式串和switch中的跳转表等只读数据
.data
 已经初始化的全局变量,注意c中的局部变量只有在运行是才会在栈上分配空间,它既不在.data段,也不在.bss 段
.bss
 未初始化的全局变量,他仅仅只是一个占位符,不占据实际的空间
.symtab
符号表,存放在程序中被定义和引用的函数和全局变量的信息
.rel.text
 .text节中需要进行重定位的单元的位置列表,当链接器把目标文件和其他文件相结合时,.text 节中的信息需要修改,这里包含了需要修改的信息
.rel.data
 .data 节中需要进行重定位的单元的位置列表,一般而言, 被模块定义和引用的全局变量和外部定义函数可能需要重定位
.debug
 用于调试的调试符号表, gcc -g 才可能得到这张表
.line
 原始的c程序的行号和.text机器指令之间的映射,gcc -g 才可能得到这张表
.strtab
 一个字符串表,其中包括.systab和.debug 节中的符号表


2 适于执行的可执行文件(executable file)   

1. 用于提供程序的进程映像, 加载的内存执行

3 共享目标文件(shared object file)

    1. 共享库,比如.so , .a


阅读(987) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~