bss,data,text段

转自:https://zhidao.baidu.com/question/359130406.html


你好,你提到的bss段,data段,text段是计算机(不一定是pc机,也可能是嵌入式开发板)的引导程序的汇编部分,对于pc来说就是bios,而对于嵌入式产品就是 bootloader的 startup.s汇编程序,当然启动引导程序在机器里面会以二进制文件形式出现,也就是.bin文件,亦称可执行文件,并且把可执行文件分为两种情况:分别为存放态和运行态。下面分两部分来讲解:
1、存放态是指在存储介质(flash或磁盘)上的分布. 此时可执行文件一般由两部分组成:分别是代码段和数据段。代码段又分为可执行代码段(.text)和只读数据段(.rodata),数据段又分为初始化数据段(.data)和未初始化数据段(.bss)。分布见下图
+-------------+-----------
| .bss |
+-------------+-- 数据段
| .data |
+-------------+-----------
| .rodata |
|_____________| 代码段
| .text |
+-------------+-----------
2、当可执行文件(也就是.bin文件)被拷贝到flash等之类的外部存储器时,接下来要做的就是把可执行文件搬运到cpu内部的ram中,这个过程叫装载,也就是可执行文件从存放态到运行态的转变。当然,搬过去的时候可执行文件在结构上将发生变化,下面是装载前后的变化:
| ... |
+-------------+-----------
| .bss | ZI 段
+-------------+-- 数据段
| .data | RW 段
+-------------+-----------
| .rodata |
|_____________| 代码段(RO 段)
| .text |
+-------------+-----------
| ... |
装载前

当可执行文件装载后, 在RAM中的分布如下:
| ... |
+-------------+-- ZI段结束地址
| ZI 段 |
+-------------+-- ZI段起始地址
| 保留区2 |
+-------------+-- RW段结束地址
| RW 段 |
+-------------+-- RW段起始地址
| 保留区1 |
+-------------+-- RO段结束地址
| RO 段 |
+-------------+-- RO段起始地址
| ... |
装载后
好了,我说的也许太含糊,那就推荐几本书给你:《linux系统移植》、《linux内核全注释》,如果看不懂那就说明你的基础还有待提高,多看一些基础的书籍:《arm汇编》、《c语言》、《嵌入式系统设计》
 
写的比较好的文章:http://book.51cto.com/art/200904/120998.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值