深入理解计算机系统_可执行目标文件和可重定位目标文件的3个区别

news2025/2/21 23:33:26

这篇笔记对比一下可执行目标文件和可执行目标的3个区别。下图分别是可重定位目标文件和可执行目标文件各段结构。
可重定位目标文件格式
可执行目标文件格式

1.1 可执行目标文件和可重定位目标文件的3个区别

区别1:可执行目标文件的rel.text和.rel.data消失了

链接器将.o中.text和.data节整合到一起时,会对整合后的.text和.data进行重定位,.text和.data节重定位时需要依赖.rel.text和.rel.data中的信息,一旦重定位结束后,这两个节的使命就完成了,所以可执行目标文件中不存在rel.text和rel.data节。

区别2:多出了init节

init节的作用:init节会初始程序的堆栈。在编译时候,如果加上-v查看详细的编译过程(前边笔记中使用过-v选项),就会看到如下信息。
collect2 //链接程序
-dynamic-linker /lib64/ld-linux-x86-64.so.2 //动态链接器
crt1.o crti.o crtbegin.o //启动代码
ccyIcm4A.o //自己程序的.o
-lc //libc,常用c函数库——c标准库的子库
crtend.o crtn.o //程序运行结束时的扫尾代码

区别3:可执行目标文件增加了段头部表

段头部表的作用:用来辅助加载程序。当程序加载到内存时,需要将硬盘上的可执行目标文件,搬到“运行地址(虚拟内存的地址0x08400XXXX)”所指定的内存位置,段头部表中的作用就是用来辅助加载程序的。

1.2 总结下可执行目标文件的ELF格式

通过以上的对比,将可执行目标文件的格式分为如下图所示的节,符号表和调试信息,可读可写存储段和只读存储段。
在这里插入图片描述
符号表和调试信息:程序正常运行时,这5个节中的信息不会被加载到内存中,只有调试时候,才会被加载。
可读可写存储段(静态数据段):bss和data段的内存可以被修改,.data存放初始化的全局变量和static静态变量;.bss存放未初始化的静态和全局变量。之所以成为静态存储段,是因为在编译时候,就对.data/.bss的空间进行了划分,并不是程序运行起来后才被安排,所以称为静态数据段。
只读存储段(代码段):这些空间只能读不能写,.radata存放只读常量数据;.text存放代码段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ROS2入门】理解 ROS 2 Topics 话题

大家好,我是虎哥,从今天开始,我将花一段时间,开始将自己从ROS1切换到ROS2,在上一篇中,我们一起了解ROS 2中节点的功能以及与之交互的工具, 这一篇,我们主要会围绕ROS中另外一个重要的…

RS232 RS485 TO ETH TCP-Modbus 测试

原来modbus 传感器都是有对应的指令码的,不同功能的指令码也不一样,比如测温度和湿度的指令码也是不一样的; 硬件连接如下图 (温湿度传感器,板载SHT20) ​ 编辑切换为居中 添加图片注释,不超…

华为VRRP、BFD实验配置

目录 VRRP实验配置 BFD实验配置 配置单跳检测 配置多跳检测 配置单臂回声 BFD与路由协议联动配置 BFD与OSPF联动 BFD与ISIS联动 BFD与BGP联动 VRRP实验配置 VRRP配置 AR1配置(VRRP缺省优先级100) int g0/0/0 ip add 192.168.10.1 24 vrrp vrid …

织音云站长扶持计划:可免费获得CDN或虚拟主机

活动介绍活动详情页:织音云站长扶持计划网站被恶意攻击时是中小站长最脆弱的时候,90%的站长都会动“关站不干了”的心思,夹在中间真的很难搞!因此织音云决定为中小站长提供免费的全球CDN加速服务和提供免费的虚拟主机,免备案!只需…

智改数转水循环在线监测系统,提升企业生产安

江苏省政府印发《江苏省制造业智能化改造和数字化转型三年行动计划(2022-2024年)》,提出通过三年的努力,全省制造业数字化、网络化、智能化水平显著提升,新业态、新模式、新动能显著壮大,制造业…

linux系统中使用QT操作硬件蜂鸣器的方法

大家好,今天主要和大家聊一聊,如何使用QT进行蜂鸣器的控制与实现。 目录 第一:资源基本简介 第二:应用实例的代码实现 第三:源文件“mainwindow.cpp”的具体实现 第四:程序运行效果 第一:资…

自动控制原理课程设计

一、实验目的(1)要求学生根据书上习题的要求,自行设计一校正装置,并用本 实验挂件 构成的模拟系统 进行实验和实际调试、使学生能认识到校正装置在系统中的重要性。(2)掌握工程中常用的 二阶系统 和 三阶系统 的工程设计方法。二、实验所需挂件及附件型 …

Docker 安装mysql主从复制

1、新建主服务器容器实例3307docker run -d -p 3307:3306 -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORDroot --name mysql-master mysql:5.72、进入/myd…

Acwing——第二场热身赛

题目链接 AcWing 3547. 特殊数字 AcWing 3548. 双端队列 AcWing 3549. 最长非递减子序列 题目描述 3547.特殊数字 我们规定,对于一个整数 a,如果其各位数字相加之和能够被 4 整除,则称它是一个特殊数字。 现在,给定一个整数 n…

算法第十一期——BFS(广度优先搜索)入门与应用

目录 BFS BFS:找最短路路径 BFS:用队列实现 特点 最短路径问题用BFS 应用场合 例题一 【思路】 输出路径的两种方法 简单方法 标准方法(栈) BFS:连通性判断 例题二:全球变暖 【思路】 BFS的三种实现 1、queue实现 2、 li…

分享66个Java源码,总有一款适合您

Java源码 分享66个Java源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 源码下载链接:https://pan.baidu.com/s/1wnPO7GfR_cVmDb2qx-4vEw?pwdlrsu …

Android 深入系统完全讲解(16)

2 属性权限 我们来看下属性权限的整体流程,简单分析下这个模块。init.cpp -->property_init() init 进程 进入第二阶段的时候,初始化属性。 关键点,创建了一个目录,这个目录就是我们属性后续会存在的地方。加载对应文件中的配…

[ADT笔记]图(graph)

定义 其实跟树差不多&#xff0c;但是树强调的是节点&#xff08;data&#xff09;&#xff0c;图则既强调节点又强调边。 分类 有向图&#xff08;边有方向&#xff09;无向图&#xff08;边没方向&#xff09; 例如&#xff0c;在无向图里<j,i>和<i,j>是同一…

(简单成功版本)Mysql配置my.ini文件

目录 一、背景 二、删除原有的mysql服务 三、初始化mysql 四、自行添加my.ini文件 五、新建mysql服务 六、启动mysql服务 七、设置数据库密码 7.1 登录mysql数据库 7.2 修改root用户密码 八、配置my.ini问题 一、背景 我在两台电脑上安装了MySQL Server 8.0&#xff0…

谈谈你对React的理解?

1、思路 讲讲概念、说用途、设计思路和原理、有什么优缺点 2、概念 一句话解释技术本质&#xff0c;React是javascript的UI库&#xff0c;通过组件化的方式解决视图层开发复用问题&#xff0c;本质是组件化框架。 viewfn(props) const A(props)><div>A</div&g…

java打包之jar和war为何出现又有什么区别

文章目录jar为什么诞生如何打jar包war为什么诞生如何打war包jar与war有什么区别jar与war的种类&#xff08;进阶&#xff09;参考资料jar为什么诞生 java工程有大量文件&#xff0c;在部署的时候需要向服务器上传大量文件&#xff0c;如果有了jar的话&#xff0c;只需上传一个…

鹅鹅鸭又崩了咋办?试试这5个方法

要说最近大火的游戏&#xff0c;鹅鹅鸭/鹅鸭杀绝对算一个。这种休闲策略游戏&#xff0c;还能跟朋友、家人约着一起玩。 不过最近很多玩家在玩鹅鹅鸭时都遇到闪退、卡顿、进不去等情况&#xff0c;虽然有太火爆服务器不稳定&#xff0c;服务器被攻击的原因&#xff0c;但有时候…

【机器学习之模型融合】Voting投票法基础理论

目录 1、认识模型融合&#x1f338; 2、模型融合和集成算法的区别&#x1f339; 3、常见模型融合方式&#x1f341; 4、投票法Voting&#x1f33f; 4.1、不同的投票方法&#x1f334; 1、认识模型融合&#x1f338; 在机器学习竞赛界&#xff0c;流传着一句话&#xff1a;…

redis基本数据结构使用与场景

string&#xff08;字符串&#xff09;用法使用场景list&#xff08;列表&#xff09;用法使用场景set&#xff08;不可重复&#xff0c;乱序的集合&#xff09;用法使用场景zset &#xff08;相对于set集合 增加了score属性&#xff0c;score可用于排序&#xff09;用法使用场…

持续集成:使用Jenkins API创建视图

持续集成&#xff1a;通过Jenkins API创建项目和节点介绍了使用jenkins API来创建项目和新建节点&#xff0c;jenkins API也可以创建视图&#xff08;view&#xff09;。 目录1. 获取视图配置文件2. 创建视图3. 将job添加到视图1. 获取视图配置文件 jenkins API创建视图&#…