`
simohayha
  • 浏览: 1401063 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

linux下的elf结构

阅读更多




可以看到链接器和加载器看待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
2
0
分享到:
评论

相关推荐

    linux的elf手册

    本文档主要介绍了Linux环境下ELF文件格式的相关知识。 #### 二、基本概念 **1. ELF文件结构** - **ELF头部** (`ElfN_Ehdr`): 文件最开始的部分,描述了整个ELF文件的基本信息。 - **程序头表** (`ElfN_Phdr`): ...

    Linux下ELF可执行文件载入过程源码分析

    ### Linux下ELF可执行文件载入过程源码分析 #### 引子 在Linux操作系统中,每一个可执行文件在被执行之前都需要经过一系列复杂的加载过程。这个过程涉及到多个内核函数以及用户空间与内核空间的数据交换。本文将对...

    linux中elf手册翻译

    ELF(Executable and Linkable Format)是Unix和类Unix系统(例如Linux)中用于二进制文件的标准文件格式,主要用于存储可执行文件、可重定位目标文件、核心转储文件和共享库。 ELF文件结构的设计使得它既适用于32位...

    Linux下的ELF文件格式简介.pdf

    "Linux下的ELF文件格式简介" ELF(Executable and Linkable Format,可执行与链接格式)文件格式是Linux操作系统中的一种常用的目标文件格式。它是由UNIX System Laboratories(USL)开发的,目的是为了提供一种...

    Linux系统下的ELF文件分析.pdf

    Linux系统下的ELF文件分析 ELF(Executable and Linkable Format)是一种可执行连接文件格式,目前已经成为Linux、SVR4和Solaris2.0默认的目标文件格式。理解ELF文件对理解一些重要的系统概念非常有帮助,例如程序...

    LinuxELF病毒感染技术研究

    本文将详细介绍ELF文件的基本结构,并在此基础上探讨Linux ELF病毒的几种常见感染技术。 #### 二、ELF文件格式概览 ELF(Executable and Linking Format)格式是Linux操作系统中用于存储可执行文件的标准格式。它由...

    Winux病毒感染Linux下ELF文件的分析

    ### Winux病毒感染Linux下ELF文件的分析 #### 摘要 随着操作系统的广泛应用,针对这些系统的病毒问题也日益突出。大多数病毒都是通过感染文件的方式进行传播的。本文主要探讨了Linux操作系统下的一种特定病毒——...

    elf64_pack.zip_ELF64位格式PDF_elf_elf64位压缩源码_elf文件加密_linux elf加密

    描述中提到,这是一个"linux下64位elf文件加密工具",这意味着它是一个专门为Linux环境设计的程序,用来对64位ELF文件进行加密。工具是用GCC编译器编译的,这是Linux开发中最常用的C/C++编译器。"实际生产请修改部分...

    Linux下的ELF文件格式简介.doc

    ELF,全称为Executable and Linkable Format(可执行和可链接格式),是Linux系统下广泛使用的二进制文件格式。它包含了程序代码、数据、符号表、重定位信息等多种元素,使得编译器、链接器、加载器以及运行时系统...

    elf for linux.rar_elf_linux elf

    《深入理解Linux ELF格式:从源代码探索》 在Linux世界中,ELF(Executable and Linkable Format)是用于可执行文件、共享库以及核心转储的标准二进制文件格式。它是由UNIX System Laboratories开发,并在Linux系统...

    linux下的elf 文件分析

    ### Linux下的ELF文件分析 #### 一、简介 ELF (Executable and Linkable Format) 是一种被广泛应用于Linux和其他类Unix操作系统中的目标文件格式。它不仅用于存储可执行文件,还包括共享对象文件和目标代码文件。...

    linux x86平台elf 进程注入so并且实现基于rel的hook ubuntu14.01测试通过

    首先,我们需要理解ELF文件结构。ELF文件包含程序头表和节区头表,它们定义了程序的入口点、内存布局以及代码和数据的位置。动态链接库(.so文件)则是在运行时被加载到进程地址空间的,提供了可重用的函数和数据。 ...

    Linux系统下的ELF文件分析

    ### Linux系统下的ELF文件分析 #### 1. 引言 随着Linux系统的不断发展与普及,**可执行和可链接格式(Executable and Linkable Format,简称ELF)**已成为Linux系统下极其重要的可执行文件格式之一。作为一种标准...

    PE文件结构与ELF文件结构

    PE 文件结构和 ELF 文件结构是两种常用的文件格式,分别是 Windows 操作系统和 Linux 操作系统上的程序文件。下面将对 PE 文件结构和 ELF 文件结构进行详细的介绍和分析。 PE 文件结构 PE 文件(Portable ...

    Linux-ELF文件详解

    ### Linux-ELF文件详解 #### 一、简介 ELF (Executable and Linkable Format) 是一种被广泛应用于Unix和类Unix系统中的目标文件格式,包括但不限于Linux、FreeBSD等。这种格式支持可执行文件、目标代码、共享库...

    linux,elf文件内容解析器,实现readelf的功能

    参考Linux系统中readelf的功能输出,编写一个程序实现和其一样的功能,以实现对elf文件的头、程序头、节区头等内容的读取显示,相当于是一个对readelf的复现,但是功能上并不是很完备,这里只实现了读取elf头、程序...

    arm-linux-gcc和arm-elf-gcc 区别

    "arm-linux-gcc和arm-elf-gcc 的区别" arm-linux-gcc 和 arm-elf-gcc 是嵌入式交叉编译工具链中最常用的两个 GCC 工具链,它们之间的主要区别在于使用不同的 C 库文件。arm-linux-gcc 使用 GNU 的 Glibc,而 arm-...

    linux virus - ELF format

    Linux病毒作为一种在快速增长的操作系统环境下的新型威胁,虽然目前出现的病毒种类和数量还不多,但随着Linux桌面用户数量的增长,未来可能会成为一个更大的问题。传统的Linux病毒可以分为两类:一类是直接附加型...

    arm-elf-tools-20040427.rar_arm elf _arm-elf_arm-elf-tools 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_arm linux gcc_arm-elf-gcc_elf_

    标题中的“gcc_arm-linux-gcc_arm-elf-gcc.rar”提到了一个压缩包文件,它包含的PDF文档可能详细阐述了关于GCC(GNU Compiler Collection)在不同环境下的应用,特别是针对ARM架构的Linux系统和ARM-ELF目标平台。...

Global site tag (gtag.js) - Google Analytics