Chap-4 Section 4.2.4 指令修正方式

对于X86平台下的ELF文件的重定位入口所修正的指令寻址方式只有两种:绝对近址32寻址和相对近址32寻址。

这两种指令修正方式每个被修正的位置的长度都为32位,即4个字节,而且都是近址寻址,不用考虑Intel的段间远址寻址。r_info成员的低8位表示重定位入口的类型。

X86基本重定位类型

宏定义                        值      重定位修正方法

R_386_32      1     绝对寻址修正  S + A

R_386_PC32    2     相对寻址修正  S + A - P

A = 保存在指令中被修正位置的值

P = 被修正的位置(相对于段开始的偏移量或者虚拟地址),该值可以通过r_offset计算得到。

S = 符号的实际地址,即由r_info的高24位指定的符号的实际地址。

因为a.o中shared和swap需要地址重定位,以此为例子说明重定位地址修正方法。用objdump -r a.o可以得到a.o中需要重定位的符号如图4.2.7所示:

***图4.2.7(同4.2.4相同)***

从图中可知,shared的重定位类型为R_386_32,因此为绝对寻址修正方式。那么S的值怎么得到,可以从a.o,b.o链接成的可执行文件的符号表中得到,可执行文件的符号表如图4.2.8:

***图4.2.8***

从图中看出shared的实际地址为0x08049158,即是S的值。从a.o反汇编指令中可知A的值,如图4.2.9所示:

***图4.2.9***

从图4.2.7中得知shared相对段开始的偏移为0x15,所以A的值是0x0。那么shared重定位后的地址为S + A = 0x08049158 + 0x0 = 0x08049158。怎样验证该数值的正确性?可以通过可执行文件的反汇编代码验证,如图4.2.10所示:

***图4.2.10***

注意:图中的地址为小端格式,即数值的高位存放在低地址,低位在高地址。
而swap的重定位方式为相对寻址修正,swap的S值从图4.2.8中可知为0x080480c0,A的值为0xfffffffc,为-4的补码。P的值为符号swap的偏移量加上该段的起始地址,swap的偏移量为0x21,该段的起始地址符号main的地址,即为0x08048094。因此最终swap的地址为0x080480c0 - 0x04 - (0x08048094 + 0x21)= 0x07。从图4.2.10可以看到call指令被修正后的地址确实为0x07。而call指令的调用地址是修正后的地址加上下一条
指令的地址,0x07 + 0x080480b9 = 0x080480c0,该地址即为swap函数的地址。

***图4.2.11***

转载于:https://www.cnblogs.com/miaoyong/p/3505590.html

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

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

相关文章

没见过女人的小和尚——SVDD

是的,即便是出生在山上的小和尚,从来没有下过山,没有见过女人,但是一旦有女施主上山,小和尚依然可以轻松地区分出眼前的人是如此不同。 传统的SVM是寻找一个超平面,而SVDD寻找的超平面更进一步&#xff0c…

解读GAN及其 2016 年度进展

作者:程程 链接:https://zhuanlan.zhihu.com/p/25000523 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 GAN,全称为Generative Adversarial Nets,直译为生成式对抗网络…

全国首套中小学生人工智能教材在沪亮相

来源:网络大数据中小学 AI 教材正式亮相11 月 18 日,优必选与华东师范大学出版社共同发布了《AI 上未来智造者——中小学人工智能精品课程系列丛书》(以下简称“AI 上未来智造者”丛书)。据了解,该丛书根据教育部“义务…

numpy基础知识点

1. np.squeeze 一,np.squeeze """ np.squeeze 删除单维度的条 对多维度无效 """ import numpy as np anp.array([[1,2],[3,4],[4,5]]) print(a) print(a.shape) bnp.squeeze(a) print(b) ca.reshape(1,6,1) print(c) print(np.squeeze(c)) pri…

从智能交通到智能能源:智慧城市在7个方面的应用实践

来源:资本实验室目前,智慧城市已经成为全球众多城市未来规划和设计的方向,并致力于通过各种新技术的应用来改善城市居民的工作与生活。但什么样的技术应用能够推动智慧城市的建设?如何让新技术在智慧城市中的应用效率最大化&#…

别以为if slse很简单——决策树

怎么分——熵与Gini指数 熵,表示信息量的期望,含义是混乱程度,也是对随机变量编码所需的最小比特数。请参考之前的文章。 信息增益建立在熵之上,是选择某特征之后熵减少的多少(熵减少即信息增加)&#xf…

tensorflow实现回归

直线拟合:yw*xb """ 回归:直线拟合 """ import tensorflow as tf import numpy as np import matplotlib.pyplot as plt x_datanp.random.rand(100) y_datax_data*51Wtf.Variable(0.) btf.Variable(0.) y_predW*x_databxtf.placehol…

微软亚研院20周年独家撰文:数据智能的现在与未来

文:微软亚洲研究院软件分析组来源:雷锋网摘要:今年是微软亚洲研究院(MSRA)20周年,站在这个大节点上,MSRA副院长张冬梅以及她的团队写了这篇有关数据智能的文章,对该领域的发展和未来…

二维与三维之间的桥梁——点云

在做图像配准时就听闻过一些点云的方法,却没对其有太多的认识,只是知道点云point cloud顾名思义就是一些离散点的集合。现在在无人驾驶中一些激光雷达的作用其实就是生成点云数据,接下来介绍一下点云数据的含义和基础的使用方法。 虽然特斯拉…

python刷题+leetcode(第一部分)

1. 设计前中后队列 思路:python代码直接利用list的insert特性 class FrontMiddleBackQueue:def __init__(self):self.queque []def pushFront(self, val: int) -> None:self.queque.insert(0, val)def pushMiddle(self, val: int) -> None:self.queque.insert(len(self…

LINQ基础概述

介绍LINQ基础之前,首说一下LINQ 的历史和LINQ是什么,然后说一下学习 LINQ要了解的东西和 LINQ基础语法LINQ 的历史从语言方面的进化 –委托 –匿名方法 –Lambda表达式 –Linq查询表达式 上边这四个我会在下边一一解说 从时间方面的演进 –2004年 –2005…

机器人“快递小哥”上岗了!京东配送机器人编队长沙亮相

11 月 22 日上午,京东物流配送机器人智能配送站启用仪式在长沙举行,随着载有用户订单的配送机器人编队从站内依次发出,全球首个由机器人完成配送任务的智能配送站正式投入使用。首个京东配送机器人智能配送站位于长沙市科技新城,占…

3D打印技术如何影响未来

来源:学习时报我们应该对3D打印技术保持谨慎态度,但过度反应和监管也可能会扼杀创新。历史经验表明,在技术的不利一面被应用之前进行规范构建对话是最有效的。因此,各国际主体,包括国家、商业领袖、政府官员和其他政策…

HDR简单介绍

问题定义 HDR字面意思是高动态范围High Dynamic Range,而动态范围是高图像质量的五个要素之一(其余是1. 分辨率,2.位深度,3.帧速率,4.色域),而画质直接关系到人眼的主观感受。 如果将动态范围理解为量化的…

争议中挺进全新里程——中国“超级对撞机”《概念设计报告》发布侧记

来源:科技导报2018 年11 月12 日下午6 点半,北京市玉泉路,中国科学院高能物理研究所,所有建筑和行人沐浴在初冬夜晚的清冷与安静之中。不同的是,主楼西侧一座新楼的大厅里,却充满了热望和兴奋。这里正进行着…

haar级联分类器--人脸检测和匹配

分类器链接,https://download.csdn.net/download/fanzonghao/10582586 代码: import numpy as np import cv2# 实例化人脸分类器 face_cascade cv2.CascadeClassifier(./haarcascades/haarcascade_frontalface_default.xml) # 实例化眼睛分类器 eye_c…

社会科技奖不是新鲜事?如何真正做大

来源:中国科学报我国的社会力量设立科学技术奖励起步于上世纪80年代。科技部网站上2018年9月5日更新的《社会科技奖励目录》显示,目前我国共有269个社会科技奖项登记在册,其中最后一个正是未来科学大奖。11月18日,2018未来科学大奖…

泊松融合——用了拉普拉斯但没有金字塔

图像融合的方式有alpha融合,拉普拉斯金字塔融合。 同样是基于拉普拉斯算子,我们可以直接用求解的方式得到融合后的图像。因为人眼对二阶导是更敏感的,所以只要我们指定了融合区域内部的梯度值,并且知道融合边界处的值&#xff0c…

三层神经网络实现手写字母的识别(基于tensorflow)

数据集的制作参考这篇文章: https://blog.csdn.net/fanzonghao/article/details/81229409 一,读取数据集 import tensorflow as tf import numpy as np import pickle import matplotlib.pyplot as plt #对于x变成(samles,pixs),y变成one_hot (sample…

(转)Kinect背景移除支持多人

原文:http://blogs.msdn.com/b/k4wdev/archive/2013/10/22/using-kinect-background-removal-with-multiple-users.aspx?utm_sourcetuicool Introduction: Background Removal in Kinect for Windows The 1.8 release of the Kinect for Windows Developer Toolkit…