其中比较重要的就是它记录了Program Header Table以及Section Header Table的起始位置、数量和大小,还有Section Header String Table的index,这个Section Header String Table马上就会讲到,详情见Section Header Table,这几个可能在逆向和防护上用得上,其他的用处不大。 所以综
(1)ELF 头部(ELF Header):包含了文件的总体信息,比如入口点地址、程序头表和节头表的位置等。 (2)程序头表(Program Header Table):由一组program header组成。program header给操作系统/动态链接器加载程序到内存中提供了必要的信息。 PS:操作系统本身就有一个elf loader用于加载elf可执行文件,对于Executable file...
描述Section header table 的结构体: ELF header(ELF 头) 头部内容,就相当于是一个总管,它决定了这个完整的 ELF 文件内部的所有信息,比如: 这是一个 ELF 文件; 一些基本信息:版本,文件类型,机器类型; Program header table(程序头表)的开始地址,在整个文件的什么地方; Section header table(节头表)的开始地址...
/* Legal values for p_type (segment type). */#define PT_NULL 0/* Program header table entry unused */#define PT_LOAD 1/* Loadable program segment */#define PT_DYNAMIC 2/* Dynamic linking information */#define PT_INTERP 3/* Program interpreter */#define PT_NOTE 4/* Auxiliary informa...
程序头表 (program header table) 是一个结构体数组,数组中的每个结构体元素是一个程序头 (program header),每个程序头描述一个段 (segment)。 一个so 通常有两个可加载段 (LOAD) 段,android linker 在加载 so 时会根据 LOAD 段在内存中的最大虚拟地址减去最小虚拟地址,来计算要申请的内存大小。
ELF头(ELF header):放在ELF文件开头,描述该文件信息。 节头表(Section header table):包含对节(section)的描述,对于可重定位文件(relocatable files)是必须的,对于可装载文件(loadable files)是可选的。 程序头表(Program header table):对于可装载文件(loadable files)是必须的,对于可重定位文件(relocatable files...
1. Program header table 是程式要能執行的重要資訊,program header table 紀錄 ELF image 裡的 'segment' 分佈,請參考 Jollen's Blog「 ELF 之 Program Loading 教學文件, #1: Segment 的觀念 」的說明。 2. 對 dynamic loader/linker 來說,ELF 的 'section' 是通透性的(transparent),也就是在整個載入的...
load_elf_phdrs 加载程序头表 load_elf_phdrs函数就是通过kernel_read读入整个program header table 从函数代码中可以看到,一个可执行程序必须至少有一个段(segment), 而所有段的大小之和不能超过64K。 */ elf_phdata = load_elf_phdrs(&loc->elf_ex, bprm->file); if (!elf_phdata) goto out; /* ...
ELF 文件头(File Header):位于文件最开始,包含了整个文件的结构信息,例如是ELF 幻数,是哪种 ELF 文件,程序头表、节头表的地址等。 程序头表(Program Header Table):描述了所有段的信息 节头表(Section Header Table):描述了所有节的信息 本文不会解释结构体每个元素,而是利用 readelf 工具解读。如果需要详细到...
描述Section header table 的结构体: ELF header(ELF 头) 头部内容,就相当于是一个总管,它决定了这个完整的 ELF 文件内部的所有信息,比如: 这是一个 ELF 文件; 一些基本信息:版本,文件类型,机器类型; Program header table(程序头表)的开始地址,在整个文件的什么地方; ...