`
simohayha
  • 浏览: 1386381 次
  • 性别: 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
分享到:
评论

相关推荐

    LinuxELF病毒感染技术研究

    ELF病毒是指寄生在ELF文件中并以ELF文件为主要感染对象的病毒。论文在分析ELF格式组织结构的基 础上,研究了Linux ELF病毒的感染技术,主要包括覆盖感染、合并感染、插入感染和蛀穴感染四种。

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

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

    PE文件结构与ELF文件结构

    对PE文件结构和ELF文件结构的具体描述,PE是windows操作系统的,ELF是linux操作系统的

    ELF文件格式(中文)

    ELF文件格式 对于学习Linux操作系统的 必须了解的

    计算机那些事(4)——ELF文件结构 _ 楚权的世界1

    Windows下的 PE(Portable Executable)Linux下的 ELF(Executable Linkable Format)目标文件就是源代

    Linux系统典型文件格式ELF1

    第一部分,ELF Header描述整个ELF文件的数据存储概况,如操作系统是UNIX,体系结构是Advanced Micro Devices X86-64,数据

    Linux编程--Linux内核

    5.6.1 Linux内核PCI数据结构 53 5.6.2 PCI设备驱动程序 53 5.6.3 PCI的BIOS函数 56 5.6.4 PCI修正过程 57 第6章 中断处理与设备驱动程序 60 6.1 中断与中断处理 60 6.1.1 可编程中断控制器 61 6.1.2 初始化中断处理...

    Linux编程从入门到精通

    5.6.1 Linux内核PCI数据结构 53 5.6.2 PCI设备驱动程序 53 5.6.3 PCI的BIOS函数 56 5.6.4 PCI修正过程 57 第6章 中断处理与设备驱动程序 60 6.1 中断与中断处理 60 6.1.1 可编程中断控制器 61 6.1.2 初始化中断处理...

    LINUX编程白皮书 (全集)

    5.6.1 Linux内核PCI数据结构 53 5.6.2 PCI设备驱动程序 53 5.6.3 PCI的BIOS函数 56 5.6.4 PCI修正过程 57 第6章 中断处理与设备驱动程序 60 6.1 中断与中断处理 60 6.1.1 可编程中断控制器 61 6.1.2 初始化中断处理...

    linux编程白皮书

    对深入研究Linux下的编程有很大的帮助。 目 录 雷蒙序 简介 Linux文档工程小组“公告” 译者序 第一部分 Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 ...

    Linux内核 内容很全

    进程 29 3.1 Linux进程 29 3.2 标识符 31 3.3 调度 32 3.4 文件 34 3.5 虚拟内存 35 3.6 创建进程 36 3.7 时间和定时器 37 3.8 执行程序 38 3.8.1 ELF 39 3.8.2 脚本文件 40 第4章...

    漫谈Linux兼容内核

    01:ReactOS怎样实现系统调用.pdf 02:关于kernel -win32的对象管理.pdf 03:关于kernel-win32的文件操作.pdf 04:Kernel-win32的进程管理.pdf 05:Kernel-win32的系统调用机制....26:Windows的结构化异常处理(三).pdf

    LINUX编程白皮书

    对深入研究Linux下的编程有很大的帮助。 目 录 雷蒙序 简介 Linux文档工程小组“公告” 译者序 第一部分 Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 ...

    Linux编程白皮书.rar

    1.2.3 内核数据结构 13 第2章 内存管理 15 2.1 虚拟内存抽象模型 15 2.1.1 请求调页 17 2.1.2 交换 17 2.1.3 共享虚拟内存 18 2.1.4 物理寻址模式和虚拟寻址模式 18 2.1.5 访问控制 18 2.2 高速缓存 19 2.3 Linux...

    Linux编程白皮书

    5.6.1 Linux内核PCI数据结构 53 5.6.2 PCI设备驱动程序 53 5.6.3 PCI的BIOS函数 56 5.6.4 PCI修正过程 57 第6章 中断处理与设备驱动程序 60 6.1 中断与中断处理 60 6.1.1 可编程中断控制器 61 6.1.2 初始化中断处理...

    LINUX 20招

    强行退出X  有时候在X里由于程序出错鼠标键盘都不起作用,这时候不用着急,因为在Linux下几乎不会像在Win95里那样恶性死机, 你只须键入Ctrl Alt BackSpace键就可以回到字符界面下了。 <br> 10.重装Win9x后...

    Linux编程资料

    5.6.1 Linux内核PCI数据结构 53 5.6.2 PCI设备驱动程序 53 5.6.3 PCI的BIOS函数 56 5.6.4 PCI修正过程 57 第6章 中断处理与设备驱动程序 60 6.1 中断与中断处理 60 6.1.1 可编程中断控制器 61 6.1.2 初始化中断处理...

Global site tag (gtag.js) - Google Analytics