p_filesz 和 Elf32_Phdr 的 p_memsz 之间的区别
Difference between p_filesz and p_memsz of Elf32_Phdr
我无法理解 p_filesz 和 Elf32_Phdr 的 p_memsz 之间的确切区别。
谁能帮我理解一下?
从 elf 文档中,我看到下面 p_filesz 和 p_memsz 的定义,但我并不完全清楚。
p_filesz :该成员给出了该段在文件映像中的字节数;可能是
零。
p_memsz :该成员给出了该段在内存映像中的字节数;它
可能为零。
"file image" 和 "memory image" 到底是什么?
正如您在评论中所述,p_filesz
字段对应于文件中段的字节大小,而 p_memsz
是段的内存大小。 p_memsz
大于(或等于)p_filesz
的原因是可加载段可能包含一个 .bss
段,其中包含未初始化的数据。将这些数据存储在磁盘上会很浪费,因此一旦 ELF 文件加载到内存中,它只占用 space。这一事实由 .bss
部分的 SHT_NOBITS
类型表示。
根据 ELF 规范,在 p_memsz
大于 p_filesz
的情况下,段初始化区域之后的额外字节被定义为保存值 0。
我无法理解 p_filesz 和 Elf32_Phdr 的 p_memsz 之间的确切区别。 谁能帮我理解一下?
从 elf 文档中,我看到下面 p_filesz 和 p_memsz 的定义,但我并不完全清楚。
p_filesz :该成员给出了该段在文件映像中的字节数;可能是 零。 p_memsz :该成员给出了该段在内存映像中的字节数;它 可能为零。
"file image" 和 "memory image" 到底是什么?
正如您在评论中所述,p_filesz
字段对应于文件中段的字节大小,而 p_memsz
是段的内存大小。 p_memsz
大于(或等于)p_filesz
的原因是可加载段可能包含一个 .bss
段,其中包含未初始化的数据。将这些数据存储在磁盘上会很浪费,因此一旦 ELF 文件加载到内存中,它只占用 space。这一事实由 .bss
部分的 SHT_NOBITS
类型表示。
根据 ELF 规范,在 p_memsz
大于 p_filesz
的情况下,段初始化区域之后的额外字节被定义为保存值 0。