目标文件里有什么

目标文件是源码编译后未链接的中间文件,目标文件里面存放的是什么?怎么存储的?实际上目标文件、可执行文件、动态链接库、静态链接库的存储都几乎是一样的。静态链接库是多个目标文件的文件包,加上一些索引。

目标文件的格式

可执行文件格式:windows下PE(portable executable),linux下是ELF(executable linkable format),这两种都是COFF(commin file format)的变种。

ELF文件分四类:

image-20210419190431082

image-20210419190442755

Linux下可以用file 文件名来查看文件类型

目标文件什么样

image-20210419191329402

文件头、代码段、数据段、bss段

文件头

描述文件信息的,是否可执行、是静态链接还是动态链接等等,还有一个段表,描述各个段在文件中的偏移位置。

代码段

机器代码

数据段

已经初始化的全局变量和局部静态变量

bss段

未初始化的全局变量和局部静态变量,但是并不给该段的数据分配空间,只是记录数据所需空间的大小。

因为他们默认值都是0,存放数据0是没有必要的

为什么要分成指令和数据两种段

  • 便于虚存权限的管理,数据可读写,指令只读
  • 局部性原理,提高对指令和数据的缓存命中率
  • 系统中运行多个该程序的副本,可以实现共享,如指令,图标,文本,特别是有动态链接后,可以大大节省内存。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×