程序链接步骤2:重定位

一、链接步骤

链接步骤1“符号解析”: 将符号引用和符号定义建立关联后;

链接步骤2“重定位”: 将引用符号的地址“重定位”为相关联的符号定义的地址。

二、原文链接:https://www.jianshu.com/p/7d13ec4735ba

符号解析完成后,就可进行重定位了。

2.1 前面的链接概述的文章提到过,符号的重定位分为以下三步:

1.合并相同的节

将集合E的所有目标模块中相同的节合并成新节。例如,所有 .text节合并作为可执行文件的 .text节

2.对符号定义进行重定位(确定地址)

确定新节中所有的符号定义在虚拟地址空间中的地址。例如,为函数确定首地址,进而确定每条指令的地址,为变量确定首地址

3.对符号引用进行重定位(填入地址)

修改.text节和.data节中对每个符号的引用(地址)
需要用到 .rel.text 和 .rel.data节中保存的重定位信息

2.2 这里有必要对重定位信息进行说明,如图:

2.3 下面是一个符号重定位的示例,如图:

① 首先进行符号解析

符号解析的结果是:
E中有main.o和swap.o两个模块,D中有所有定义的符号。
在main.o和swap.o的重定位条目中有重定位信息,反映符号引用的位置、绑定的符号名、重定位类型。

② 合并相同的节

③ 具体看一看main.o和swap.o的符号重定位的过程:
main.o 重定位前

main.o 中的符号表

2.4 通过这个例子,介绍一下R_386_PC32R_386_32的重定位方式,如下图:

1. R_386_PC32​​​​​​​

​​​​​​​​​​​​​​        

2. R_386_32

       

        

        

 

swap.o的重定位




原文链接:https://www.jianshu.com/p/7d13ec4735ba

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

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

相关文章

ZooKeeper 搭建详细步骤之二(伪集群模式)

ZooKeeper 搭建详细步骤之一(单机模式) ZooKeeper 及相关概念简介 伪集群搭建 ZooKeeper 伪集群是指在一个单一的物理或虚拟机环境中模拟出一个由多个 ZooKeeper 节点构成的集群。尽管这些节点实际上运行在同一台机器上,但它们通过配置不同的…

字节秋招高频算法汇总(高级篇)

更多大厂面试内容可见 -> http://11come.cn 字节秋招高频算法汇总 接下来讲一下 字节秋招 中的高频算法题,分为三个部分: 基础篇 、 中级篇 、 进阶篇 目的就是为了应对秋招中的算法题,其实过算法题的诀窍就在于 理解的基础上 背会 看…

【ARMv9 DSU-120 系列 5 -- CHI Interface】

请阅读【Arm DynamIQ™ Shared Unit-120 专栏 】 文章目录 DSU-120 CHI BUSAddress Target Groups配置步骤映射和管理Hashing for CHI transaction distribution散列过程和地址目标组识别散列函数定义两个地址目标组的散列四个地址目标组的散列八个地址目标组的散列架构框图

与Apollo共创生态:我和Apollo七周年大会的心路历程

一、写在前面 前几天观看了Apollo七周年大会,给我带来了超多的惊喜,博主想将这份惊喜分享给大家! 二、Apollo开放平台 Apollo开放平台秉承其核心理念——开放能力、共享资源、加速创新、持续共赢,致力于推动自动驾驶技术的革新…

《HCIP-openEuler实验指导手册》1.2Apache主页面配置

一、配置服务器监听IP及端口 注释主配置文件“监听IP及端口”部分 cd /etc/httpd/conf cp httpd.conf httpd.conf.bak vim httpd.conf可以在普通模式下搜索Listen关键字 :/Listen按n键继续向后搜索 在/etc/httpd/conf.d中新建子配置文件port.conf: touch /etc…

新质生产力的内涵

新质生产力是以科技创新为先导,摆脱传统增长路径、符合高质量发展要求的生产力跃迁新形态,是数字时代更具有融合性、更体现新内涵的生产力组合。如果说传统生产力是人类已经掌握并正在使用的生产力,那么,新质生产力就是以大数据、…

Linux系统及工具的使用

​ Linux的版本系列与划分: Redhat与Debian系介绍(Linux各种发行版本概述)_酷炫人笨笨熊-CSDN博客_redhat和debian的区别 ubuntu下 1.打开 .bashrc文件, 在最后面添加下面一句话 Ubuntu 22.04下安装配置rime五笔输入法_ubuntu 22.04 五笔_繁星间漫步的博客-CSDN博客…

观成科技:蔓灵花组织加密通信研究分析总结

1.概述 蔓灵花,又名"Bitter",常对南亚周边及孟加拉湾海域的相关国家发起网络攻击,主要针对巴基斯坦和中国两国。其攻击目标主要包括政府部门、核工业、能源、国防、军工、船舶工业、航空工业以及海运等行业,其主要意图…

笔记:Python 注释(练习题)

文章目录 前言一、Python 注释是什么?二、选择题二、填空题三、编程题总结 前言 欢迎来到Python注释练习!在这个练习中,我们将探讨Python中注释的重要性和使用方法。注释在代码中扮演着关键的角色,不仅可以提高代码的可读性&…

火绒安全:全面守护你的数字世界

火绒安全:全面守护你的数字世界 在数字化时代的浪潮中,我们的电脑和生活已经紧密相连。然而,网络安全问题也如影随形,恶意软件、病毒、间谍软件等安全威胁层出不穷。作为一名国际著名的病毒程序软件专家,我深知一款高…

AI未来——从萌芽到智能新纪元

按照人工智能的发展阶段,具体的里程碑事件和细节: 人工智能的萌芽期(1940年代-1950年代) 1943年,麦卡洛克和皮茨发表题为《A Logical Calculus of Ideas Immanent in Nervous Activity》的论文,首次提出人工神经网络概念1950年,图灵在《计算机器与智能》一文中提出…

后端每日一题 2:DNS 解析过程

本文首发于公众号:腐烂的橘子 本文梗概: DNS 是什么,有什么作用一条 DNS 记录是什么样的DNS 域名解析原理DNS 服务器如何抵御攻击 DNS 是什么,有什么作用 DNS(Domain Name System)是一种应用层协议&…

JS高级 -- 数据类型

1. 分类 基本(值)类型 String:任意字符串Number:任意的数字Boolean:true / falseundefined:undefinednull:null 对象(引用)类型 Object:任意对象Function:一种特别的对象(可以执行)Array&am…

解决 Oracle 表锁

程序更新大量数据的时候, 由于时间太长, 页面刷新又重新提交了一次, 结果后续的任何变动都直接卡住, 一开始以为是代码问题, 使用 jstack 命令导出了当前堆栈, 结果发现有重复的语句卡在 update 上了, 看 sql 语句, 发现就是正常的 update, 那问题大概率就是出在表被锁身上了. …

使用和配置:超秀的 MySQL 客户端工具 MyCli

1.安装一个更人性化的一个mysql客户端、终端: sudo apt install mycli 登录方式 mycli -uroot password 2. 功能:界面更好看,且支持自动补全,按tab可以补全 3.mycli使用帮助说明文档 mycli --help用法: mycli [OPTIONS] [DATABASE]例如:…

西门子程序专业备份软件BUDdy for S7和使用说明

西门子程序专业备份软件BUDdy for S7和使用说明

如何在Django中使用Ajax进行动态数据更新?

在Django中使用Ajax进行动态数据更新需要以下步骤&#xff1a; 在前端页面中引入jQuery库。 <script src"https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>创建一个处理Ajax请求的视图函数。 from django.http import Json…

虹科Pico汽车示波器 | 免拆诊断案例 | 2006 款林肯领航员车发动机怠速抖动

故障现象 一辆2006款林肯领航员车&#xff0c;搭载5.4 L发动机&#xff0c;累计行驶里程约为26万km。该车因发动机怠速抖动故障进厂维修&#xff0c;维修人员更换了火花塞、点火线圈及凸轮轴位置传感器&#xff0c;清洗了积炭和喷油器&#xff0c;故障依旧&#xff0c;于是向笔…

富格林:正确曝光做单欺诈套路

富格林悉知&#xff0c;黄金是一种不错的投资产品&#xff0c;其具有良好的避险作用。选择已曝光的正确黄金产品&#xff0c;也能把握不错的收益。虽然黄金投资的对象单一&#xff0c;但这并不意味着投资者可以轻而易举获得收益&#xff0c;要想获得收益就得杜绝欺诈套路。下面…

SpringBoot学习之Redis下载安装启动【Windows版本】(三十六)

一、下载Redis for Windows Redis 官方网站没有提供 Windows 版的安装包,但可以通过 GitHub 来下载安装包,下载地址:https://github.com/tporadowski/redis/releases 1、网站提供了安装包和免安装版本,这里我们直接选择下面的免安装版本 2、下载后的压缩包解压以后,如下…