为什么可执行文件和可链接格式(ELF)文件包含一组部分?

时间:2013-12-29 19:26:24

标签: c linux signals signal-processing file-handling

这些天我指的是Linux中的文件处理系统调用。

此外,我理解 ELF ,它是可执行文件和可链接格式,包含一组部分。

.bss .data .rodata .text .comment 未知

我提到Wikipedia和此Website来研究

所以我有以下问题

为什么ELF文件使用一组部分?

上面每个部分的任务是什么?

使用这组部分的可行性是什么?

1 个答案:

答案 0 :(得分:3)

ELF文件格式的一个很好的参考是Object Files chapter of the System V ABI。特别是,special sections描述了您可能遇到的大多数部分的用法。

  

为什么ELF文件使用一组部分?

目标文件包含许多不同类别的数据,将类似数据分组到各个部分是有意义的,尤其是当操作系统执行ELF文件时,某些部分的内容可以直接读入进程的图像。

  • .bss包含未初始化的数据,例如在C程序中在全局级别声明的int a;。实际上,除了在将ELF文件加载到进程中时需要分配的大小之外,它什么都没有,因为bss中的所有变量都被初始化为0。
  • .data包含初始化数据,例如在C程序中在全局级别声明的int a = 1000;
  • .rodata包含只读数据,例如字符串文字和在C中声明为const的全局级变量。当操作系统执行ELF文件时,它会将此部分加载到内存是只读的。
  • .text包含可执行指令。当OS执行ELF文件时,它会将此部分加载到只读的内存区域。有时.text.rodata会被加载到进程内存的同一区域。
  • .comment通常包含用于生成文件的编译器的名称和版本。

并非文档中描述的所有部分都可能出现在所有ELF文件中;特别是,在ELF文件上运行strip命令将删除.symtab.debug部分。