Elf32_Phdr的p_filesz和p_memsz之间的区别

时间:2015-01-15 07:46:04

标签: elf

我无法理解Elf32_Phdr的p_filesz和p_memsz之间的确切区别。 任何人都可以帮我理解这个吗?

从精灵文档中我看到p_filesz和p_memsz的定义,但我并不完全清楚。

p_filesz:该成员给出段的文件映像中的字节数;它可能是 零。 p_memsz:该成员给出段的内存映像中的字节数;它 可能是零。

究竟是什么"文件图像"和"记忆图像"?

1 个答案:

答案 0 :(得分:3)

正如您在评论中已经说明的那样,p_filesz字段对应于文件中段的字节大小,而p_memsz是段的内存大小。 p_memsz大于(或等于)p_filesz的原因是可加载的细分可能包含.bss部分,其中包含未初始化的数据。将这些数据存储在磁盘上会很浪费,因此只有在ELF文件加载到内存后才会占用空间。此事实由SHT_NOBITS部分的.bss类型表示。

根据ELF规范,在p_memsz大于p_filesz的情况下,段的初始化区域后面的额外字节被定义为保持值0。