可以看到链接器和加载器看待elf是完全不同的,链接器看到的是由区段头部表描述的一系列逻辑区段的集合(也就是说它忽略了程序头部表)。而加载器则是看成是由程序头部表描述的一系列的段的集合(忽略了区段头部表)。
elf它可以表示不同类型的二进制文件(由e_type来决定):
#define ET_NONE 0
#define ET_REL 1 //可重定位
#define ET_EXEC 2 //可执行
#define ET_DYN 3 //动态链接库
#define ET_CORE 4
#define ET_LOPROC 0xff00
#define ET_HIPROC 0xffff
elf的头结构
typedef struct elf32_hdr{
unsigned char e_ident[EI_NIDENT];//魔幻数
Elf32_Half e_type; //文件类型.
Elf32_Half e_machine; //机器类型,也就是架构
Elf32_Word e_version; //版本
Elf32_Addr e_entry; //入口地址(如果是可执行文件)
Elf32_Off e_phoff; //头表在程序中的相对位置
Elf32_Off e_shoff; //区段头部的位移
Elf32_Word e_flags; //体系结构相关的标志
Elf32_Half e_ehsize; //该elf的头部大小
Elf32_Half e_phentsize; //程序头部表项的大小
Elf32_Half e_phnum; //程序头部表项的个数
Elf32_Half e_shentsize; //区段头部表项的大小
Elf32_Half e_shnum; //区段头部表项的个数
Elf32_Half e_shstrndx; //区段序号
} Elf32_Ehdr;
区段头部表项:
typedef struct {
Elf32_Word sh_name; //名字
Elf32_Word sh_type; //类型
Elf32_Word sh_flags; //区段的一些属性
Elf32_Addr sh_addr; //Section virtual addr at execution
Elf32_Off sh_offset; //区段起始点在文件中的位置
Elf32_Word sh_size; //区段大小
Elf32_Word sh_link; //其他的区段号(比如链接了其他的elf文件)
Elf32_Word sh_info; //附加的一些区段信息
Elf32_Word sh_addralign; //对齐粒度
Elf32_Word sh_entsize; //
} Elf32_Shdr;
程序头部表--紧跟在elf头下面,其实也就是可执行文件用到的,由于可执行文件需要将文件映射到内存,并运行,因此这里的头部增加了要被映射的段:
typedef struct elf32_phdr{
Elf32_Word p_type; //类型
Elf32_Off p_offset; //
Elf32_Addr p_vaddr;//映射端的虚拟地址
Elf32_Addr p_paddr;//物理地址
Elf32_Word p_filesz;//文件中段的大小
Elf32_Word p_memsz;//内存中段的大小
Elf32_Word p_flags;
Elf32_Word p_align;
} Elf32_Phdr;
符号表结构:
typedef struct elf32_sym{
Elf32_Word st_name; //符号名
Elf32_Addr st_value; //符号值
Elf32_Word st_size; //目标大小
unsigned char st_info; // 符号的类型以及绑定类型信息
unsigned char st_other; //一些空闲段
Elf32_Half st_shndx; //段基址
} Elf32_Sym;
- 大小: 77.8 KB
分享到:
相关推荐
本文档主要介绍了Linux环境下ELF文件格式的相关知识。 #### 二、基本概念 **1. ELF文件结构** - **ELF头部** (`ElfN_Ehdr`): 文件最开始的部分,描述了整个ELF文件的基本信息。 - **程序头表** (`ElfN_Phdr`): ...
### Linux下ELF可执行文件载入过程源码分析 #### 引子 在Linux操作系统中,每一个可执行文件在被执行之前都需要经过一系列复杂的加载过程。这个过程涉及到多个内核函数以及用户空间与内核空间的数据交换。本文将对...
ELF(Executable and Linkable Format)是Unix和类Unix系统(例如Linux)中用于二进制文件的标准文件格式,主要用于存储可执行文件、可重定位目标文件、核心转储文件和共享库。 ELF文件结构的设计使得它既适用于32位...
"Linux下的ELF文件格式简介" ELF(Executable and Linkable Format,可执行与链接格式)文件格式是Linux操作系统中的一种常用的目标文件格式。它是由UNIX System Laboratories(USL)开发的,目的是为了提供一种...
Linux系统下的ELF文件分析 ELF(Executable and Linkable Format)是一种可执行连接文件格式,目前已经成为Linux、SVR4和Solaris2.0默认的目标文件格式。理解ELF文件对理解一些重要的系统概念非常有帮助,例如程序...
本文将详细介绍ELF文件的基本结构,并在此基础上探讨Linux ELF病毒的几种常见感染技术。 #### 二、ELF文件格式概览 ELF(Executable and Linking Format)格式是Linux操作系统中用于存储可执行文件的标准格式。它由...
### Winux病毒感染Linux下ELF文件的分析 #### 摘要 随着操作系统的广泛应用,针对这些系统的病毒问题也日益突出。大多数病毒都是通过感染文件的方式进行传播的。本文主要探讨了Linux操作系统下的一种特定病毒——...
描述中提到,这是一个"linux下64位elf文件加密工具",这意味着它是一个专门为Linux环境设计的程序,用来对64位ELF文件进行加密。工具是用GCC编译器编译的,这是Linux开发中最常用的C/C++编译器。"实际生产请修改部分...
ELF,全称为Executable and Linkable Format(可执行和可链接格式),是Linux系统下广泛使用的二进制文件格式。它包含了程序代码、数据、符号表、重定位信息等多种元素,使得编译器、链接器、加载器以及运行时系统...
《深入理解Linux ELF格式:从源代码探索》 在Linux世界中,ELF(Executable and Linkable Format)是用于可执行文件、共享库以及核心转储的标准二进制文件格式。它是由UNIX System Laboratories开发,并在Linux系统...
### Linux下的ELF文件分析 #### 一、简介 ELF (Executable and Linkable Format) 是一种被广泛应用于Linux和其他类Unix操作系统中的目标文件格式。它不仅用于存储可执行文件,还包括共享对象文件和目标代码文件。...
首先,我们需要理解ELF文件结构。ELF文件包含程序头表和节区头表,它们定义了程序的入口点、内存布局以及代码和数据的位置。动态链接库(.so文件)则是在运行时被加载到进程地址空间的,提供了可重用的函数和数据。 ...
### Linux系统下的ELF文件分析 #### 1. 引言 随着Linux系统的不断发展与普及,**可执行和可链接格式(Executable and Linkable Format,简称ELF)**已成为Linux系统下极其重要的可执行文件格式之一。作为一种标准...
PE 文件结构和 ELF 文件结构是两种常用的文件格式,分别是 Windows 操作系统和 Linux 操作系统上的程序文件。下面将对 PE 文件结构和 ELF 文件结构进行详细的介绍和分析。 PE 文件结构 PE 文件(Portable ...
### Linux-ELF文件详解 #### 一、简介 ELF (Executable and Linkable Format) 是一种被广泛应用于Unix和类Unix系统中的目标文件格式,包括但不限于Linux、FreeBSD等。这种格式支持可执行文件、目标代码、共享库...
参考Linux系统中readelf的功能输出,编写一个程序实现和其一样的功能,以实现对elf文件的头、程序头、节区头等内容的读取显示,相当于是一个对readelf的复现,但是功能上并不是很完备,这里只实现了读取elf头、程序...
"arm-linux-gcc和arm-elf-gcc 的区别" arm-linux-gcc 和 arm-elf-gcc 是嵌入式交叉编译工具链中最常用的两个 GCC 工具链,它们之间的主要区别在于使用不同的 C 库文件。arm-linux-gcc 使用 GNU 的 Glibc,而 arm-...
Linux病毒作为一种在快速增长的操作系统环境下的新型威胁,虽然目前出现的病毒种类和数量还不多,但随着Linux桌面用户数量的增长,未来可能会成为一个更大的问题。传统的Linux病毒可以分为两类:一类是直接附加型...
- “arm_elf”:这指的是ARM体系结构下的ELF(Executable and Linkable Format),是Unix和类Unix系统中常见的可执行文件和共享库格式。 - “arm-elf-arm-elf-tools”:这部分强调了这是专门为ARM架构设计的ELF工具...
标题中的“gcc_arm-linux-gcc_arm-elf-gcc.rar”提到了一个压缩包文件,它包含的PDF文档可能详细阐述了关于GCC(GNU Compiler Collection)在不同环境下的应用,特别是针对ARM架构的Linux系统和ARM-ELF目标平台。...