这些天我指的是Linux中的文件处理系统调用。
此外,我理解 ELF ,它是可执行文件和可链接格式,包含一组部分。
.bss , .data , .rodata , .text , .comment ,未知
所以我有以下问题
为什么ELF文件使用一组部分?
上面每个部分的任务是什么?
使用这组部分的可行性是什么?
答案 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
部分。