可以看到链接器和加载器看待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
分享到:
相关推荐
ELF病毒是指寄生在ELF文件中并以ELF文件为主要感染对象的病毒。论文在分析ELF格式组织结构的基 础上,研究了Linux ELF病毒的感染技术,主要包括覆盖感染、合并感染、插入感染和蛀穴感染四种。
参考Linux系统中readelf的功能输出,编写一个程序实现和其一样的功能,以实现对elf文件的头、程序头、节区头等内容的读取显示,相当于是一个对readelf的复现,但是功能上并不是很完备,这里只实现了读取elf头、程序...
对PE文件结构和ELF文件结构的具体描述,PE是windows操作系统的,ELF是linux操作系统的
ELF文件格式 对于学习Linux操作系统的 必须了解的
Windows下的 PE(Portable Executable)Linux下的 ELF(Executable Linkable Format)目标文件就是源代
第一部分,ELF Header描述整个ELF文件的数据存储概况,如操作系统是UNIX,体系结构是Advanced Micro Devices X86-64,数据
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 初始化中断处理...
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 初始化中断处理...
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内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 ...
进程 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章...
01:ReactOS怎样实现系统调用.pdf 02:关于kernel -win32的对象管理.pdf 03:关于kernel-win32的文件操作.pdf 04:Kernel-win32的进程管理.pdf 05:Kernel-win32的系统调用机制....26:Windows的结构化异常处理(三).pdf
对深入研究Linux下的编程有很大的帮助。 目 录 雷蒙序 简介 Linux文档工程小组“公告” 译者序 第一部分 Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 ...
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...
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 初始化中断处理...
强行退出X 有时候在X里由于程序出错鼠标键盘都不起作用,这时候不用着急,因为在Linux下几乎不会像在Win95里那样恶性死机, 你只须键入Ctrl Alt BackSpace键就可以回到字符界面下了。 <br> 10.重装Win9x后...
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 初始化中断处理...