Linux ELF文件学习(1)
ELF文件 |
可重定位文件(relocatable file) |
可重定位文件(relocatable file),用于与其它目标文件进行连接以构建可执行文件或动态链接库。可重定位文件就是常说的目标文件,由源文件编译而成,但还没有连接成可执行文件。在 UNIX系统下,一般有扩展名”.o”。之所以称其为“可重定位”,是因为在这些文件中,如果引用到其它目标文件或库文件中定义的符号(变量或者函数)的话,只是给出一个名字,这里还并不知道这个符号在哪里,其具体的地址是什么。需要在连接的过程中,把对这些外部符号的引用重新定位到其真正定义的位置上,所以称目标文件为“可重定位”或者“待重定位”的。 |
共享目标文件(shared object file) |
即动态连接库文件。它在以下两种情况下被使用:第一,在连接过程中与其它动态链接库或可重定位文件一起构建新的目标文件;第二,在可执行文件被加载的过程中,被动态链接到新的进程中,成为运行代码的一部分。 |
|
可执行文件(executable file ) |
经过连接的,可以执行的程序文件。 |
![](http://blog.chinaunix.net/photo/94212_101201164532.jpg)
|
我使用Ultraedit打开一个ELF文件,来分析它的前52个字节:
e_ident[0] |
7F |
目标文件最开头的前四个字节。 文件标志,表示是ELF文件 EI_MAG0 = 0, EI_MAG1 = 1, EI_MAG2 = 2, EI_MAG3 = 3 |
|||||||||||||||||||||
e_ident[1] |
45 == ‘E’ |
||||||||||||||||||||||
e_ident[2] |
4C == ’L’ |
||||||||||||||||||||||
e_ident[3] |
46 == ‘F’ |
||||||||||||||||||||||
e_ident[4] |
01 |
文件类别,取值如下:(EI_CLASS = 4)
|
|||||||||||||||||||||
e_ident[5] |
01 |
编码格式,取值如下:(EI_DATA = 5)
|
|||||||||||||||||||||
e_ident[6] |
01 |
文件版本,(EI_VERSION),为1表明是目前版本 |
|||||||||||||||||||||
e_ident[7] to e_ident[15] |
00 00 00 00 00 00 00 00 00 |
这就个字节暂且不使用,留在以后扩展。 |
|||||||||||||||||||||
e_type |
00 01 |
此字段表明文件属于那种类型:
|
|||||||||||||||||||||
e_machine |
00 03 |
体系结构类型 : Intel 80386 |
|||||||||||||||||||||
e_version |
00 00 00 01 |
目前版本 |
|||||||||||||||||||||
e_entry |
00 00 00 00 |
||||||||||||||||||||||
e_phoff |
00 00 00 00 |
没有程序头部表。 |
|||||||||||||||||||||
e_shoff |
00 00 00 FC |
e_ident[0]是文件的第一个字节,从它开始FC(252)字节后就是节的数据信息。 |
|||||||||||||||||||||
e_flags |
00 00 00 00 |
||||||||||||||||||||||
e_ehsize |
00 34 |
52字节的ELF头部结构体 |
|||||||||||||||||||||
e_phentsize |
00 00 |
因为没有程序头部表,所以大小为0 |
|||||||||||||||||||||
e_phnum |
00 00 |
同上 |
|||||||||||||||||||||
e_shentsize |
00 28 |
40字节的节区头部表 |
|||||||||||||||||||||
e_shnum |
00 0B |
节区头部表的表项有B(11)个 |
|||||||||||||||||||||
e_shstrndx |
00 08 |
节头表中与节名字表相对应的表项的索引。 |
下面的一段程序用来读ELF文件的头部:readelf_h.c:
|
$./readelf_lan readelf_lan.o
This is ELF file.
文件类别: 32位目标文件
编码格式: 小端编码格式
文件版本: 当前版本
目标文件类型: e_type = 1 可重定位文件类型
体系结构为:e_machine = 3
Intel 8086版本信息: 当前版本
程序入口的虚拟地址:0x0
程序头部表格的偏移量(按字节): 0x0, 0
节区头部表格的偏移量(按字节): 0xc00, 3072
处理器标志位: 0
ELF头文件大小: 0x34, 52
程序头部表大小: 0x0, 0
程序头部表的数目:0x0, 0
节区头部表大小: 0x28, 40
节区头部表数目: 0xc, 12
节头表与节名字相对应的表项的索引: 0x9, 9
Linux ELF文件学习(1)相关推荐
- linux elf 文件理解与分析
https://linux-audit.com/elf-binaries-on-linux-understanding-and-analysis/ 我们理所当然的使用一些工具.其中一部分就是 linu ...
- linux elf 文件查看工具 readelf
Android在NDK开发工具中提供了readelf,用来帮助开发者查看编译后目标文件的组成结构和具体内容. 常用的有以下几个功能选项: 1)-h或者--file-header 显示在ELF文件头里包 ...
- Linux如何找到所有elf文件,linux – ELF文件中的导入表在哪里?
But you can see in the attached picture,that on the offset 464 there are only zeros. 错误:上次我检查时,01,20 ...
- Linux ELF文件
ELF全称:可执行链接格式,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的.ELF文件有三种不同类型: 可重定位 ...
- Linux repo 文件学习;
在CentOS下安装gcc:出现一个错误: 看一下里面有repo的字样:下面来学习repo相关内容: 在linux下,repo文件都是存放在/etc/yum.repos.d文件夹之中的.repo文件即 ...
- linux elf 文件加密
ELF头的各个字段如下: #define EI_NIDENT 16 typedef struct{ unsigned char e_ident[EI_NIDENT]; //目标文件标识信息 Elf32 ...
- linux 导入函数,共享库 – Linux ELF文件:如何获取属于导入函数的共享对象
How can I find out from which shared library/shared object the strcp function is obtained? 通常,您不能:该库 ...
- Linux里gcc编译过程分析和ELF文件格式学习
GCC编译器背后的故事及常用命令.了解ELF文件格式 前言 一.GCC简介 二.GCC背后的战友 1.Binutils 2.C运行库 三.GCC编译流程及对应命令 1.编译流程图及命令框图 2.实践操 ...
- Ubuntu18.04系统下,gcc编译过程分析、命令参数介绍及ELF文件格式学习
GCC编译器背后的故事及常用命令.了解ELF文件格式 文章目录 GCC编译器背后的故事及常用命令.了解ELF文件格式 前言 一.GCC简介 二.GCC背后的战友 1.Binutils 2.C运行库 三 ...
- Linux ELF文件格式介绍
文章目录 一.引言 二.介绍 三.ELF目标文件格式 3.1 常见段及对应用途 3.2 目标文件内容解析 3.2.1 代码段.text 3.2.2 只读数据段.rodata 3.2.3 数据段.dat ...
最新文章
- 系统服务器端口怎么关闭了,如何关闭云服务器端口号
- Ubuntu Linux 安装后,建立嵌入式开发环境
- Python pip工具初步学习
- k3运行linux,首个Kubernetes操作系统k3OS,附主要功能介绍
- 《深入理解Android 卷III》第四章 深入理解WindowManagerService
- matplotlib 中文_Python 关于matplotlib无法显示中文字体的解决方法
- 自己选择的路,不后悔
- 如何做一个让开发人员看得起的软件测试人员
- 微信小程序——实现时钟样式
- python高维数据存储_Numpy高维数据的理解
- Python 2X 版本 痛苦的编码格式,一遍完美解决Unicode、GB2312、GBK编码格式的文章
- 数学公式编辑器AxMath
- 网站SEO诊断优化有那些不利操作
- 基于机智云IoT开发平台的温室番茄远程监控系统
- CSS+HTML 顶部导航栏实现
- DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unico
- 企业微信和个人微信的区别
- java实现奖学金申请,基于ssm+mysql的web助学金申请系统[实现过程记录]
- 计算机无线网怎么安装教程,wifi怎么安装,教您电脑如何安装wifi
- python表示倍数_倍数 python
热门文章
- RailsCasts中文版,#15 Fun with Find Conditions 使用hash为查询条件以便生成正确语法的SQL查询...
- 使用Spark core和SparkSQL的窗口函数分别实现分组取topN的操作
- crontab 定时执行任务
- PostgreSQL 全文检索 - 词频统计
- LabVIEW--为控件添加说明信息
- Docker-registry + GlusterFS
- 十一月份英语学习总结—积累
- 关于php开发中用户请求数据的安全问题的一点想法
- img的属性alt 与 title的区别
- vsftp客户连接常见故障现象