我无法理解Elf32_Phdr的p_filesz和p_memsz之间的确切区别。
谁能帮我理解这一点?

从elf文件中,我可以看到以下p_filesz和p_memsz的定义,但对我来说还不是很清楚。

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

“文件镜像”和“内存镜像”到底是什么?

最佳答案

正如您已经在注释中指出的那样,p_filesz字段对应于文件中该段的大小(以字节为单位),而p_memsz字段则是该段的内存中大小。 p_memsz大于(或等于)p_filesz的原因是,可加载段可能包含.bss节,该节包含未初始化的数据。将此数据存储在磁盘上会很浪费,因此,仅在ELF文件加载到内存后才占用空间。 SHT_NOBITS部分的.bss类型表明了这一事实。

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

关于elf - Elf32_Phdr的p_filesz和p_memsz之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27958743/

10-13 07:23