我无法理解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/