博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uboot-2011.12移植到S3C2440(序一)——ELF可执行文件及其组成
阅读量:2342 次
发布时间:2019-05-10

本文共 1754 字,大约阅读时间需要 5 分钟。

我们可以把可执行文件分为2种情况:存放态和运行态
1.存放态:可执行文件经过烧到存储介质上(flash或磁盘)的分布,此时可执行文件通常有2部分组成,代码段和数据段,代码段又分为可执行代码段 (.text)和只读数据段(.rodata),数据段可以分为初始化数据段(.data)和未初始化代码段(.bss),如下:
+-------------+-----------
| .bss        | (ZI)
+-------------+-- 数据段
| .data    | (RW)
+-------------+-----------
| .rodata     |
|_____________| 代码段(RO)
| .text    |
+-------------+-----------

.text代码段,.rodata只读数据段,.bss是未初始化全局变量段, .data是初始化被赋值的全局变量

2.运行态:可执行文件经过装载后就变成为运行态,
当可执行文件装载后, 在RAM中的分布如下:
| ...       |
+-------------+-- ZI段结束地址
| ZI 段    |
+-------------+-- ZI段起始地址
| 保留区2     |
+-------------+-- RW段结束地址
| RW 段    |
+-------------+-- RW段起始地址
| 保留区1     |
+-------------+-- RO段结束地址
| RO 段    |
+-------------+-- RO段起始地址

ZI段主要是未初始化数据,RW主要是自动变量,RO主要是代码段。

elf文件

elf文件是UNIX系统实验室开发的,主要包括可执行文件,可充分定位文件与可共享库文件等。按功能分又可分为链接文件和可执行文件。一个elf文件可以使用binutils工具集里面的readelf来查看,比如readelf -h u-boot查看u-boot文件头。

ELF Header:  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00   Class:                             ELF32  Data:                              2's complement, little endian  Version:                           1 (current)  OS/ABI:                            UNIX - System V  ABI Version:                       0  Type:                              DYN (Shared object file)  Machine:                           ARM  Version:                           0x1  Entry point address:               0x0  Start of program headers:          52 (bytes into file)  Start of section headers:          1835468 (bytes into file)  Flags:                             0x5000000, Version5 EABI  Size of this header:               52 (bytes)  Size of program headers:           32 (bytes)  Number of program headers:         4  Size of section headers:           40 (bytes)  Number of section headers:         25  Section header string table index: 22

转载地址:http://ihfvb.baihongyu.com/

你可能感兴趣的文章
Verify You Have a CUDA-Capable GPU
查看>>
ROS中OpenCV的使用——人脸检测
查看>>
ROS学习笔记(1):在ROS中使用OpenCV进行简单的图象处理--原理篇
查看>>
ROS学习笔记(2):在ROS中使用OpenCV进行简单的图像处理---代码实现篇
查看>>
C语言中声明和定义详解
查看>>
ros代码中添加使用opencv库,cv::Mat和ros image之间的相互转换
查看>>
ROS 不能再详细的安装教程
查看>>
在ros底下安装opencv
查看>>
PHP页面纯静态化与伪静态化
查看>>
分享网页到微信朋友圈,显示缩略图的方法
查看>>
PHP参数类型限制
查看>>
IOS博客项目搭建-12-刷新数据-显示最新的微博数提示
查看>>
Laravel5 Markdown 编辑器使用教程
查看>>
php文件上传与下载
查看>>
Python3学习教程
查看>>
Python3学习笔记01-第一个Python程序
查看>>
Laravel5开发学生管理系统
查看>>
Laravel5学生成绩管理系统-01-安装-建表-填充数据
查看>>
Mac OSX下使用apt-get命令
查看>>
Mac下安装PHP的mcrypt扩展的方法(自己总结的)
查看>>