《CSAPP》 可重定位目标文件格式
可重定位目标文件
ELF文件

ELF头以一个16字节的序列开始,这个序列描述了生成该文件的系统的字的大小和字节顺序。ELF头剩下的部分包含帮助链接器语法分析和解释目标文件的信息。其中包括ELF头的大小、目标文件类型、机器类型、节头部表的文件偏移,以及节头部表中的条目大小和数量。
夹在ELF头和节头部表之间的都是节。一个典型的ELF目标文件包括:
- .text
已编译程序的机器代码 - .rodata
只读数据 - .data
已初始化的全局C变量 - .bss
未初始化的全局C变量。在目标文件中这个节不占据实际的空间,仅仅是一个占位符。 - .symtab
一个符号表,它存放在程序中定义和引用的函数和全局变量的信息。 - .rel.text
一个.text节中位置的列表 - .rel.data
被模块引用或定义的任何全局变量的重定位信息。 - .debug
一个调试符号表。只有以-g选项调用编译驱动程序才会得到这张表。 - .line
原始C源程序中的行号和.text节中机器指令之间的映射。只有以-g选项调用编译驱动程序时才会得到这张表。 - .strtab
一个字符串表,内容包括.symtab和.debug节中的符号表,以及节头部中的节名字。字符串表就是以null结尾的字符串序列。
《CSAPP》 可重定位目标文件格式的更多相关文章
- [CSAPP-II] 链接[符号解析和重定位] 静态链接 动态链接 动态链接接口
1 平台 转http://blog.csdn.net/misskissc/article/details/43063419 1.1 硬件 Table 1. 硬件(lscpu) Architecture ...
- TMS320C54x系列DSP指令和编程指南——第2章 通目标文件格式介绍
第2章 通用目标文件格式介绍 汇编器和连接器可以产生在TMS320C54x器件上执行的目标文件,这些目标文件的格式称为通用目标文件格式(COFF).采用COFF格式有利于程序的模式化编程,因为它支持用 ...
- 3.5 linux 0.11 目标文件格式
在Linux0.11系统中,GNU gcc或gas编译输出的目标模块文件和链接程序生成的可执行文件都使用了UNIX传统的a.out格式.这是一种被称为汇编与链接输出(Assembly & li ...
- 【图片+代码】:GCC 链接过程中的【重定位】过程分析
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...
- ELF Format 笔记(十)—— 重定位(relocation)
ilocker:关注 Android 安全(新手) QQ: 2597294287 重定位就是把符号引用与符号定义链接起来的过程,这也是 android linker 的主要工作之一. 当程序中调用一个 ...
- ELF学习--重定位文件
add.c int data = 1;int bss;const int rodata = 1;int add(int num1, int num2){ int sum = 0; sum = num1 ...
- ELF 动态链接 - so 的 重定位表
动态链接下,无论时可执行文件还是共享对象,一旦对其他共享对象有依赖,也就是所有导入的符号时,那么代码或数据中就会有对于导入符号的引用.而在编译时期这些导入符号的确切地址时未知的.只有在运行期才能确定真 ...
- uboot2012(一)分析重定位
目录 引入 环境配置 编译体验 入口查找 代码分析 board_init_f pie 内存分布分析 SP设置 board_init_f 重定位 代码段重定位实现 变量地址修改 参考 title: ub ...
- Linux pwn入门教程(10)——针对函数重定位流程的几种攻击
作者:Tangerine@SAINTSEC 本系列的最后一篇 感谢各位看客的支持 感谢原作者的付出一直以来都有读者向笔者咨询教程系列问题,奈何该系列并非笔者所写[笔者仅为代发]且笔者功底薄弱,故无法解 ...
随机推荐
- webpack初步学习
https://segmentfault.com/a/1190000006178770 该篇文章足够webpack入门的学习了,对webpack有个初步的了解和认识.
- python select解析 socket高效通信服务器 自己写的socketserver
import select import socket import queue server = socket.socket()#创建服务器端 server.bind(('localhost',99 ...
- Arch Linux 的休眠设置
https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate_(简体中文)https://wiki.archl ...
- ionic使用的一些技巧
使用ionic总结: 1.全局禁用缓存的方法是: $ionicConfigProvider.views.maxCache(0); 2. 在不同的用户输入场景下,需要显示不同的键盘模式以方便用户输入, ...
- qsort函数排序各种类型的数据。
qsort函数是库函数中的一员,我们先来看看官方文档是怎么写的: 其中qsort的参数void* base是传入一个数组,size_t num 为数组整体大小,size_t size 为单个元素的大小 ...
- Dynamics 365 CRM Free up storage 清理Dynamics 365 CRM的空间
Dynamics 365 CRM 的空间是要买的. 但是很多情况下用户可以去清理CRM从而达到给空间减重的方法 两大使用DB空间大的功能 1. Audit log 审计记录 审计记录是用来记录各个fi ...
- 单源最短路径Dijkstra算法,多源最短路径Floyd算法
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
- getattribute
属性访问拦截器 class Itcast(object): def __init__(self,subject1): self.subject1 = subject1 self.subject2 = ...
- 饥饿的牛(dp一维最大覆盖)
问题 H: 饥饿的牛 时间限制: 1 Sec 内存限制: 128 MB提交: 12 解决: 12[提交][状态][讨论版][命题人:外部导入][Edit] [TestData] [同步数据] 题目 ...
- python读取指定字节长度的文本
软件版本 Python 2.7.13; Win 10 场景描述 1.使用python读取指定长度的文本: 2.使用python读取某一范围内的文本. Python代码 test.txt文本内包含的 ...