我无法理解Elf32_Phdr的p_filesz和p_memsz之间的确切区别。 任何人都可以帮我理解这个吗?
从精灵文档中我看到p_filesz和p_memsz的定义,但我并不完全清楚。
p_filesz:该成员给出段的文件映像中的字节数;它可能是 零。 p_memsz:该成员给出段的内存映像中的字节数;它 可能是零。
究竟是什么"文件图像"和"记忆图像"?
答案 0 :(得分:3)
正如您在评论中已经说明的那样,p_filesz
字段对应于文件中段的字节大小,而p_memsz
是段的内存大小。 p_memsz
大于(或等于)p_filesz
的原因是可加载的细分可能包含.bss
部分,其中包含未初始化的数据。将这些数据存储在磁盘上会很浪费,因此只有在ELF文件加载到内存后才会占用空间。此事实由SHT_NOBITS
部分的.bss
类型表示。
根据ELF规范,在p_memsz
大于p_filesz
的情况下,段的初始化区域后面的额外字节被定义为保持值0。