为了便于加载阶段解析和定位,.interp section还以独占方式对应一个Program,其Program Type也是独特的PT_INTERP: $ llvm-readelf --program-headers /usr/lib/x86_64-linux-gnu/libc.so.6 . . . Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align PHDR 0x000040 0x0000000040 0x000000000...
在头文件中的定义部分如下:在ELF_Header中,我们可以得到Program Header的索引地址(p_offset)、类型(p_...
百度试题 题目ELF文件主要有哪几部分?? ELF HeaderProgram HeaderSection HeaderSection或Segment 相关知识点: 试题来源: 解析 Section或Segment 反馈 收藏
ELF header:elf的头信息 sections:段信息 section header table:段表头信息 table:表信息 对于可执行程序,还有program header table信息。 一、a.o的ELF分析 下面来分析生成的a.o的ELF信息。 1、ELF头 elf头的结构体,在/usr/include/elf.h文件中,分32位版本和64位版本。我在结构体成员的注释中,将成员的偏移...
program header和文件中的segment一一对应,因为目标代码文件中没有segment,program header也就没有必要了。 可执行文件的内容组织成segment,因此program header table是必须的。 section header不是必须的,但没有strip过的二进制文件中都含有此信息。 对本地可执行文件sleep执行readelf -l sleep,输出如下: ...
⽬标代码⽂件中的section和section header table中的条⽬是⼀⼀对应的。section的信息⽤于链接器对代码重定位。⽽⽂件载⼊内存执⾏时,是以segment组织的,每个segment对应ELF⽂件中program header table中的⼀个条⽬,⽤来建⽴可执⾏⽂件的进程映像。⽐如我们通常说的,代码段、数据...
Section header string table index: 11 接下来从字节级别查看一下这些 Section Header 的内容。 从ELF Header 中可以看出 Section header table 的 offset 是1048字节,每个 Section Header 大小为64 bytes,一共有14个。 Section Header undefined $ hexdump -C -s1048 -n64 program.o ...
在 ELF中可以被修改又不影响执行的区域 该文中,本人比较认同。因为 Program Header 已经将需要加载的Section都决定了, Section Header 只是为了 readelf 这种方便读取ELF文件而存在。减少加载也可以减少内存以及文件映射所带来的损耗。所以对于Got表的偏移量可以在静态的时候,通过 readelf 来读取Got表的...
上面提到的段(Section)的内容在链接成可执行文件时,会分配不同的虚拟内存空间,也就是会映射到段(Segment)内。这个映射关系由段头表(Segment header table)来记录,它是一个结构数组。 root@000d3fada0b3:~/asm# readelf -l hello Elf file type is EXEC (Executable file) ...
不管定义了多少节名,最终要把属性相同的section,或者编译认为可以放到一块的,合并到一个大的segment中,也就是elf中说的 program header 中的项。由此可见,某个节(section)属于某个段(segment),段是由节组成的。另外多说一句,最终给加载器用的也是program header中显示的段,这才是进程的资源,这部分内容将在加载...