Program header描述的是一个段在文件中的位置、大小以及它被放进内存后所在的位置和大小。 typedef struct {Elf64_Wordp_type; Elf64_Word p_flags; Elf64_Offp_offset;Elf64_Addr p_vaddr;Elf64_Addr p_paddr;Elf64_Wordp_filesz;Elf64_Word p_memsz;Elf64_Word p_align;} p_type 当前Program head...
两者是有一些区别的,我们平时在进行程序构建的时候理解的.text、.bss、.data段,这些都是section,也就节区的概念。这些段通过section header table进行组织与重定位。 但是对于segment来说,程序代码段、数据段是Segment。代码段又可以分为.text,数据段又分为.data、.bss等。 通过readelf -l可以查看具体的可执行文件...
由上面分析可知,section headers table中的每一个section header所占的size均为64字节,ELF header得到了e_shoff变量的值为0X1170,也就是table入口的偏移量,通过看e_shnum值为0x001e,表示段表入口有30个。 所以从0x00001170开始有30个段,每个段占64个字节大小,输入 hexdump elf1查看: 第一个段,其中内容全部为...
PT_LOAD:表示一个可加载的段,加载器将根据此段的信息将文件内容映射到进程的地址空间,通常包含以下两个可装载的段:存放程序代码的 text 段以及存放全局变量和动态链接信息的 data 段,上面的两个段将会被映射到内存中,并根据 p_align 中存放的值在内存 中对齐。 PT_DYNAMIC:表示动态链接信息段,包含动态链接所需...
段与程序头有逻辑上的对应关系,就像前面图形所示,一个程序头对应多个段,程序头用于告诉系统如何将各个段放入到内存中。段对应的数据有多种类型,其中最重要的就是.text和.data,分别对应代码和数据,e_flags通常取值0,它的作用暂时用不到。 e_ehsize对应ELF文件头数据结构的大小。e_phentsize用于表明程序表头一条...
ELF文件的代码段长度和数据段长度主要取决于程序的规模和内容。代码段长度表示程序的指令集大小,数据段长度表示程序的数据大小。在程序编译链接的过程中,编译器和链接器会根据程序中实际使用的指令集和数据大小来确定代码段和数据段的大小。 总之,ELF文件格式为程序的存储和运行提供了一种标准化的方式,它定义了程序在...
40 00表示elf文件头大小为00 40(64个字节)。 e_phentsize:两个字节 00 00表示重定位文件没有程序头表。 e_phnum:两个字节 00 00表示重定位文件没有程序头表。 e_ehentsize:两个字节 40 00表示段头大小为00 40(64字节),section header table中每个header的大小。
数据段(.data):全局变量和局部静态变量被放在数据段。 只读数据段(.rodata):const 修饰的变量和其他字符串常量。 bss 段:为未初始化的符号,预留足够的空间。未初始化的变量在 bss 段。 其他段。 2 ...
从下⾯结果看到除了代码段,数据段和BSS段以外,还有.rodata(只读数据段), .comment(注释信息段),.note.GNU-stack(堆栈提⽰段)。在File off中标识了每个段的偏移位置。⽐如.text段的偏移位置是0x40. 代表ELF的header占据的空间为0x00-0x40。.text的起始位置为0x40 main.o:⽂件格式 elf64-x86-64 ...