典型的ELF可重定位目标文件
来源:互联网 发布:千牛直播和淘宝直播 编辑:程序博客网 时间:2024/05/17 19:20
夹在ELF头和节头部表之间的都是节。一个典型的ELF可重定位目标文件包含下面几个节:
- .text:已编译程序的机器代码。
- .rodata:只读数据,比如printf语句中的格式串和开关(switch)语句的跳转表。
- .data:已初始化的全局C变量。局部C变量在运行时被保存在栈中,既不出现在.data中,也不出现在.bss节中。
- .bss:未初始化的全局C变量。在目标文件中这个节不占据实际的空间,它仅仅是一个占位符。目标文件格式区分初始化和未初始化变量是为了空间效率在:在目标文件中,未初始化变量不需要占据任何实际的磁盘空间。
- .symtab:一个符号表(symbol table),它存放在程序中被定义和引用的函数和全局变量的信息。一些程序员错误地认为必须通过-g选项来编译一个程序,得到符号表信息。实际上,每个可重定位目标文件在.symtab中都有一张符号表。然而,和编译器中的符号表不同,.symtab符号表不包含局部变量的表目。
- .rel.text:当链接噐把这个目标文件和其他文件结合时,.text节中的许多位置都需要修改。一般而言,任何调用外部函数或者引用全局变量的指令都需要修改。另一方面调用本地函数的指令则不需要修改。注意,可执行目标文件中并不需要重定位信息,因此通常省略,除非使用者显式地指示链接器包含这些信息。
- .rel.data:被模块定义或引用的任何全局变量的信息。一般而言,任何已初始化全局变量的初始值是全局变量或者外部定义函数的地址都需要被修改。
- .debug:一个调试符号表,其有些表目是程序中定义的局部变量和类型定义,有些表目是程序中定义和引用的全局变量,有些是原始的C源文件。只有以-g选项调用编译驱动程序时,才会得到这张表。
- .line:原始C源程序中的行号和.text节中机器指令之间的映射。只有以-g选项调用编译驱动程序时,才会得到这张表。
- .strtab:一个字符串表,其内容包括.symtab和.debug节中的符号表,以及节头部中的节名字。字符串表就是以null结尾的字符串序列。
旁注:为什么未初始化的数据称为.bss?
用术语.bss来表示未初始化的数据是很普遍的。它起始于IBM 704汇编语言(大约在1957年)中”块存储开始(Block Storage Start)“指令的首字母缩写,并沿用至今。一个记住区分.data和.bss节的简单方法是把“bss”看成是“更好地节省空间(Better Save Space)!“的缩写。
- 典型的ELF可重定位目标文件
- 典型的ELF可重定位目标文件
- 典型的ELF可重定位目标文件
- 可重定位的ELF文件(续)
- 可重定位目标文件
- 可重定位目标文件
- Linux 可重定位文件 ELF结构
- ELF文件重定位
- ELF(七)可重定位目标,部分摘自深入理解操作系统,深入理解linx内核
- 目标文件(可重定位文件)结构
- 编译链接中的-可重定位目标文件
- 编译链接中的-可重定位目标文件
- 程序编译-汇编-链接的理解02-可重定位目标文件具体包含的信息!
- 对elf文件连接的理解(一)-重定位概述
- Linux系统--ELF文件之可重定位文件(Relocatable file)解析
- 【静态链接】第2章---------------------目标文件(ELF格式之重定位表与字符串表)
- ELF格式的重定位原理分析
- 可重录入与不可重录入和ELF文件的相关问题
- nginx伪静态大全
- 没有注册类别的一种解决方法
- SQL Server 2005不能导入数据(无法创建SSIS 运行时对象)
- 创业者如何在Demo演讲上打动投资人?
- 工作: 理解现实的复杂性
- 典型的ELF可重定位目标文件
- iOS:NSCoder的方法decodePropertyList
- ubuntu10.04 LTS升级git 版本
- iOS:NSCoder的方法decodePropertyListForKey:
- 总结--Linux命令篇(想点写点)
- iOS:NSCoder的方法decodeRect
- 伪指令
- JS自定义 Map 键值对对象
- HDU--1863--畅通工程--并查集