编译完成后的目标文件与虚拟地址空间

一、目标文件的格式

       在Windows下可执行文件的格式通常为 .exe ,在Linux下则为ELF格式,而目标文件就是源代码经过了编译阶段但没有进行链接的中间文件,它的文件结构和内容与可执行文件很相似,因此一一般和可执行文件一起采用同一种格式存储。动态链接库和静态链接库都可以按照可执行文件的格式存储

二、目标文件中数据存储格式

       汇编阶段完成后,指令被翻译成二进制形式。所有的代码被分别放进对应的段中。

       

  .text 段存放指令,.data段存放数据,那么为什么要将指令和数据分开存储呢?.bss 段又有什么作用呢?

  •    将指令和数据分开存储是因为由实模式进入到保护模式后,增加了一个虚拟地址空间以此来对数据进行保护,每一段进程对应的虚拟地址空间最终映射到真实的物理地址后,只能访问给定的物理地址,无法越界访问其它进程的物理地址。程序被装载后,数据和指令分别被映射到虚拟地址空间上对应的段中,而我们段的划分是按照权限划分的。.text段的数据是不被允许修改的,只能进行读操作和执行,而 .data 段的数据则可读可写,分开存储以免将指令修改。
  •  .bss 段中存储的是未初始化的全局变量、初始化为0的变量和局部静态变量(即弱符号),更准确的讲,.bss 段为他们预留了空间并没有真实存储,只是在最终链接成可执行文件的时候再在 .bss
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值