Linux ELF文件学习(1)
来源:互联网 发布:情义我心知粤语版 编辑:程序博客网 时间:2024/05/21 16:54
ELF文件 | 可重定位文件(relocatable file) | 可重定位文件(relocatable file),用于与其它目标文件进行连接以构建可执行文件或动态链接库。可重定位文件就是常说的目标文件,由源文件编译而成,但还没有连接成可执行文件。在 UNIX系统下,一般有扩展名”.o”。之所以称其为“可重定位”,是因为在这些文件中,如果引用到其它目标文件或库文件中定义的符号(变量或者函数)的话,只是给出一个名字,这里还并不知道这个符号在哪里,其具体的地址是什么。需要在连接的过程中,把对这些外部符号的引用重新定位到其真正定义的位置上,所以称目标文件为“可重定位”或者“待重定位”的。 |
共享目标文件(shared object file) | 即动态连接库文件。它在以下两种情况下被使用:第一,在连接过程中与其它动态链接库或可重定位文件一起构建新的目标文件;第二,在可执行文件被加载的过程中,被动态链接到新的进程中,成为运行代码的一部分。 | |
可执行文件(executable file ) | 经过连接的,可以执行的程序文件。 |
|
我使用Ultraedit打开一个ELF文件,来分析它的前52个字节:
e_ident[0] | 目标文件最开头的前四个字节。 文件标志,表示是ELF文件 EI_MAG0 = 0, EI_MAG1 = 1, EI_MAG2 = 2, EI_MAG3 = 3 | ||||||||||||||||||||||
e_ident[1] | 45 == ‘E’ | ||||||||||||||||||||||
e_ident[2] | |||||||||||||||||||||||
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内核可变参数分析
下一篇:一个程序,让你清楚区分二进制文件和文本文件
- asmlib无法加载
- 欢迎linux__free在ChinaUnix博...
- SecureCRT提示"数据库里没找到...
- 世界杰出华商协会集合企业ji...
- 基于VMware调试linux内核...
- linux 常见服务端口
- 【ROOTFS搭建】busybox的httpd...
- xmanager 2.0 for linux配置
- 什么是shell
- linux socket的bug??
- 初学UNIX环境高级编程的,关于...
- chinaunix博客什么时候可以设...
- 一个访问量较大网站的服务器。...
- 收音机驱动与v4l2架构的关系,...
- 如何将linux驱动改为裸机驱动(...
- Linux ELF文件学习(1)
- Linux ELF文件学习(1)
- Linux ELF文件学习(1)
- linux ELF文件学习
- Linux ELF文件学习
- Linux ELF文件学习
- linux elf文件装载
- linux elf文件构造
- Linux ELF文件
- ELF头文件学习
- ELF文件学习
- ELF文件学习 .bss
- 学习linux下elf文件的一些整理
- linux中elf文件介绍
- ELF文件格式学习(1)
- Linux ELF文件装入与执行概述
- linux下的ELF文件分析
- LINUX平台下ELF文件加载过程
- 从PC总线到ARM的内部总线
- 控制函数assert.h, setjmp.h和signal.h
- ADS分散加载文件及其应用
- 收藏:让你吃惊的60个绝对得看的常识!!!!
- linux内核可变参数分析
- Linux ELF文件学习(1)
- 一个程序,让你清楚区分二进制文件和文本文件
- 本土战略 Ubuntu创始人宣布将发中国版
- 出现单边帐,该如何处理!
- 程序的自我改写
- tcpdump命令详解(整理)
- Linux MTD下获取Nand flash各个参数的过程的详细解析
- windows XP下安装Qt
- Qt-简单程序实例Hello,world