ELF 文件类型

ELF (Executable Linkable Format) 是 linux 下的可执行文件格式,与 windows 下的 PE (Portable Executable) 格式一样,都是 COFF (Common File Format)文件格式的变种。在 linux 下除了可执行文件,编译过程中产生的目标文件(.o 文件),动态链接文件(.so 文件),静态链接库文件(.a 文件) ,核心转储文件(Core Dump File)都按照 ELF 格式存储。查看 ELF 文件类型可以用 file 命令。

ELF 文件结构

ELF 文件结构在 /usr/include/elf.h 中有完整定义,一些实用的命令:

file elf_file 输出 ELF 各个段的 size

readelf [options] elf_file
-S 输出 section header
-t 输出符号表 symbol table
-h 输出 ELF 文件头信息 objdump [options] elf_file
-h 输出文件基本 ELF 信息
-d 反汇编代码段
-s 输出完整内容
-r 查看重定位表
-D 反汇编所有段内容
-S 输出内容包含源代码(需要 gcc -g 参数支持)

ELF 结构中比较重要的几个段:

.data 数据段,存放已经初始化的全局/静态变量
.bss(Block Started by Symbol) 存放未初始化的全局变量和静态变量,因为这些变量在程序加载的时候都会被初始化为零,所以不需要存放实际的数据,只需要预留位置
就可以了。
.text 代码段,存放源代码编译后的机器指令
.rodata 只读数据段,存放只读变量
.symtab(Symbol Table) 符号表
.strtab(String Table) 字符串表
.plt(Procedure Linkage Table) 动态链接跳转表
.got(Global Offset Table) 动态链接全局入口表

动态链接和静态链接

在静态链接过程中,编译器将需要重定位的符号写在 ELF 结构中的重定位表 (Relocation Table) 内,之后链接器 (Linker) 分析重定位表,从全局符号表中找到相应符号的地址,完成重定位。

如果希望某个代码文件生成的对象文件可以被动态的链接,需要在编译时给 GCC 指定 -fPIC 参数, PIC(Position Independent Code)即位置无关代码。

Linux ELF 文件格式的更多相关文章

  1. Linux课题实践四——ELF文件格式分析

    2.4   ELF文件格式分析 20135318 刘浩晨 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目 ...

  2. linux第三次实践:ELF文件格式分析

    linux第三次实践:ELF文件格式分析 标签(空格分隔): 20135328陈都 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文 ...

  3. Linux及安全实践四——ELF文件格式分析

    Linux及安全实践四——ELF文件格式分析 一.ELF文件格式概述 1. ELF:是一种对象文件的格式,用于定义不同类型的对象文件中都放了什么东西.以及都以什么样的格式去放这些东西. 二.分析一个E ...

  4. Linux课程实践四:ELF文件格式分析

    一.ELF文件格式概述 1. ELF文件 ELF:Executable and Linking Format,是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东 ...

  5. 20135337——Linux实践三:ELF文件格式(64位系统,简单分析)

    ELF文件格式简单分析 (具体分析见上一篇ELF文件格式32位系统) ELF-header 第一行: 457f 464c :魔数: 0201 :64位系统,小端法 01 :文件头版本 剩余默认0: 第 ...

  6. 20135337——linux实践三:ELF文件格式分析(32位系统)

    ELF文件格式分析 可重定位文件 十六进制形式显示内容 显示各个段.符号表相关信息 查看各个段信息 elf文件头信息 段表 符号表信息 查看堆栈 具体分析 1.ELF文件头信息(小字节优先,均十六进制 ...

  7. ELF文件格式

    ELF--Linux下可执行文件格式   1.类型          常见的ELF格式文件包括:                                                     ...

  8. C语言的本质(30)——C语言与汇编之ELF文件格式

    ELF(Executable and Linking Format)文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,ELF是一种对象文件的格式,用于定义不同类型的对象文件(Obj ...

  9. ELF文件格式分析--结构篇

    ELF文件格式,全称为Excutable and Linking Format,是一个开放的可执行文件和链接文件格式,在LINUX上很流行,跨平台软件的设计也多以ELF格式作为标准,其结构扩展性兼容性 ...

随机推荐

  1. 兼容IE8的flash上传框架"uploadify"自定义上传按钮样式的办法

    (uploadify版本:3.2.1 ) 因为公司业务的原因,所做的项目需要兼容IE8,因此做的上传插件无奈选择的是基于flash的uploadify. 由于是基于flash的,所以使用过程中,难以给 ...

  2. & 引用

    核心: 对引用的操作与对变量直接操作完全一样注意点: 引用并非是地址运算符 编译器一般将引用看作是const指针,即只占用指针大小空间 引用只能在初始化的时候引用一次 ,不能更改为转而引用其他变量.使 ...

  3. ubuntu下签名命令

    Platform: RockchipOS: Android 6.0Kernel: 3.10.92 拷贝签名文件/signapk.jar和apk到同一目录下. 签名文件:rk3288/build/tar ...

  4. mysql常用连接查询

    连接数据库PDO $user = "root"; //数据库连接账号 $pass = "root"; //数据库连接密码 $dbname = "tes ...

  5. [ 9.28 ]CF每日一题系列—— 940A规律构造

    Description: 输入a,b,x,给你a个0,b个1,你要给出一个组合,让这个组合里存在x位,使得这x为和其x+1位不相等 Solution: 因为肯定有一个正确的答案,所以钻了一下空子,贪心 ...

  6. zabbix docker - 安装和初始化配置

    zabbix docker - 安装和初始化配置 安装zabbix server docker-mysql版本 zabbix server支持不同的数据库(详见zabbix的docker hub),这 ...

  7. MSRA-TD5000数据集使用详解

    中文检测的数据集,目前最火的应该是清华的CTW,https://ctwdataset.github.io/ 但是它的数据集只存储在微云和google driver,微云空间受限不能完全保存,所以下载的 ...

  8. 多核CPU配合负载均衡可以这样用,为老板省点钱

    负载均衡作为一个处理高并发,大流量的访问的业务场景,已经几乎是常识性的知识了. 而本文的意义在于需求:由于大流量请求,导致服务无法正常响应,在不增加购买机器成本的场景下,如何提高服务器的业务处理能力? ...

  9. 视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频

      视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频  2018-07-11 |  标签»下载, 下载工具, 视频 又是视频下载,老生常谈的话题.阿刚同学已在乐软博客多次与大家分享推荐 ...

  10. 【微服务】.netCore eShopOnContainers 部署实践《二》

    Docker 专业术语介绍 优点:轻量级.可伸缩(灵活性).可靠性.可移植  Container image A package with all of the dependencies and in ...