gpt4 book ai didi

c++ - elf 文件中 .bss 段空间的地址空间

转载 作者:行者123 更新时间:2023-11-28 02:51:51 27 4
gpt4 key购买 nike

如果我理解正确,通过创建一个 .bss 类型的部分(如下代码示例),.bss 部分的写入/读取区域来自部分的偏移量在文件中为 N,在这种情况下,phdr.p_memsz 增加了 N 字节,这取决于操作系统/内核将此内存区域归零.我的解释对吗?

    Elf32_Phdr phdr;
// ...
phdr.p_memsiz = somevalue;
Elf32_Shdr sec;
// ...
sec.sh_name = bss_name;
sec.sh_type = SHT_nobits;
sec.sh_flags = SHF_alloc + SHF_write;
sec.sh_size = N;
phdr.p_memsiz += N;

最佳答案

是的,操作系统将用零填充 .bss 部分。

一般来说,Linux(和其他版本的 Unix)无论如何都会将进程中的所有"new"页面归零,以避免从“先前的所有者”那里泄漏内容(可以把它想象成粉碎你的回收)。

编辑:

最终,链接器和加载器负责 .bss 部分的实际位置。通常,它位于数据部分的末尾,如 ELF 规范 1.2,图 2.5 中所述。

As "Sections" describes, the .bss section has the type SHT_NOBITS. Although it occupies no space in the file, it contributes to the segment's memory image. Normally, these uninitialized data reside at the end of the segment, thereby making p_memsz larger than p_filesz.

(别处说明内容保证为零)

你可以在这里找到规范(以及许多其他地方,但这个站点也有一些有用的扩展文档等) http://refspecs.linuxbase.org/

LLVM 源代码和相关文档也相当可读 (IMO): http://llvm.org/docs/doxygen/html/Support_2ELF_8h_source.html

有关如何指定链接和顺序、部分位置的信息: http://www.math.utah.edu/docs/info/ld_3.html

关于c++ - elf 文件中 .bss 段空间的地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22855320/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com