gpt4 book ai didi

linux - ELF 程序头 : MemSiz vs. FileSiz

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:32 24 4
gpt4 key购买 nike

readelf -l/bin/bash 给我这个:

Program Headers:  Type           Offset             VirtAddr           PhysAddr                 FileSiz            MemSiz              Flags  Align  PHDR           0x0000000000000040 0x0000000000400040 0x0000000000400040                 0x00000000000001f8 0x00000000000001f8  R E    8  INTERP         0x0000000000000238 0x0000000000400238 0x0000000000400238                 0x000000000000001a 0x000000000000001a  R      1      [Requesting program interpreter: /lib/ld-linux-x86-64.so.2]  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000                 0x00000000000aeef4 0x00000000000aeef4  R E    200000  LOAD           0x00000000000afde0 0x00000000006afde0 0x00000000006afde0                 0x0000000000003cec 0x000000000000d3c8  RW     200000  DYNAMIC        0x00000000000afdf8 0x00000000006afdf8 0x00000000006afdf8                 0x0000000000000200 0x0000000000000200  RW     8  NOTE           0x0000000000000254 0x0000000000400254 0x0000000000400254                 0x0000000000000044 0x0000000000000044  R      4  GNU_EH_FRAME   0x000000000009dbc0 0x000000000049dbc0 0x000000000049dbc0                 0x0000000000002bb4 0x0000000000002bb4  R      4  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000                 0x0000000000000000 0x0000000000000000  RW     8  GNU_RELRO      0x00000000000afde0 0x00000000006afde0 0x00000000006afde0                 0x0000000000000220 0x0000000000000220  R      1

为什么对于某些 LOAD 段,MemSiz 不等于 FileSiz?对于 MemSiz 而不是 FileSiz 包含的内存区域应该做什么?

最佳答案

有问题的可加载段似乎是程序的数据段。

程序中的数据段包含用于初始化和未初始化的程序变量。初始化变量的值是存储在程序的可执行文件中。未初始化的程序变量不需要存放在任何地方;相反,空间是为他们保留的名为“.bss”的特殊零大小部分。

因此,可执行文件数据段的文件大小可以小于它的内存大小。

举例说明:

/*
* Space for the intialized variable 'x' would be reserved the
* executable's ".data" section, along with its initial value.
*/
int x = 42;

/*
* Space for the uninitialized variable 'y' would be reserved in
* the ".bss" section; no file space would be allocated in the
* executable.
*/
int y;

在类 unix 系统上,数据段的部分映射到“.bss”部分将在程序加载时用零填充。

关于linux - ELF 程序头 : MemSiz vs. FileSiz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437732/

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