失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 深入理解计算机系统李秋豪 《深入理解计算机系统》第7章:重定位PC相对引用的理解...

深入理解计算机系统李秋豪 《深入理解计算机系统》第7章:重定位PC相对引用的理解...

时间:2019-03-02 15:05:32

相关推荐

深入理解计算机系统李秋豪 《深入理解计算机系统》第7章:重定位PC相对引用的理解...

在第七章《链接》中的静态链接有对符号进行重定位PC相对引用的处理,书上对应的还有公式,但不是很好理解。现做实验对公式进行理解(公式内容如有兴趣可以参考原文)

我们的目的是根据.text节起点和目标函数地址(如下面的0x8048420),重新计算引用偏移量

现创建2个文件

//main.c

void swap();

int buf[2]={1,2};

int main()

{

swap();

return 0;

}

//swap.c

extern int buf[];

int *bufp0 = &buf[0];

int *bufp1;

void swap()

{

int temp;

bufp1 = &buf[1];

temp = *bufp0;

*bufp0 = *bufp1;

*bufp1 = temp;

}

可以看到main.c引用了swap.c的函数,编译main.c为main.o,反汇编有如下结果

objdump -d main.o

main.o: file format elf32-i386

Disassembly of section .text:

00000000 :

0: 8d 4c 24 04 lea 0x4(%esp),%ecx

4: 83 e4 f0 and $0xfffffff0,%esp

7: ff 71 fc pushl -0x4(%ecx)

a: 55 push %ebp

b: 89 e5 mov %esp,%ebp

d: 51 push %ecx

e: 83 ec 04 sub $0x4,%esp

11: e8 fc ff ff ff call 12 --对swap引用的地址偏移量为12(call命令占一个字节)

16: b8 00 00 00 00 mov $0x0,%eax

1b: 83 c4 04 add $0x4,%esp

1e: 59 pop %ecx

1f: 5d pop %ebp

20: 8d 61 fc lea -0x4(%ecx),%esp

23: c3 ret

将swap.o和main.o编译为可执行文件p,查看p的.text节信息(截取部分如下)

[15] .text PROGBITS08048330000330 0001bc 00 AX 0 0 16--节起始地址为红色部分

反汇编p,(截取部分如下)

080483f0 :

80483f0: 8d 4c 24 04 lea 0x4(%esp),%ecx

80483f4: 83 e4 f0 and $0xfffffff0,%esp

80483f7: ff 71 fc pushl -0x4(%ecx)

80483fa: 55push %ebp

80483fb: 89 e5 mov %esp,%ebp

80483fd: 51 push %ecx

80483fe: 83 ec 04 sub $0x4,%esp

8048401: e8 1a 00 00 00 call 8048420

8048406: 83 c4 04 add $0x4,%esp

8048409: 31 c0 xor %eax,%eax

804840b: 59 pop %ecx

804840c: 5d pop %ebp

804840d: 8d 61 fc lea -0x4(%ecx),%esp

由于不知道swap相对与.text起始地址的偏移量,我们采用main函数的地址,它相对于main函数的偏移量为0x12。

那么新的引用量为0x8048420-(0x080483f0+0x12)-4 = 1A

实际上0x080483f0+0x12+4的地址就是PC的值,0x8048420-PC就是偏移值

可见公式害死人。。。

<深入理解计算机系统>第七章读书笔记

第七章读书笔记 链接 链接:将各种代码和数据部分收集起来并组合成为一个单一文件的过程.(这个文件可被加载或拷贝到存储器并执行) 链接可以执行于编译,加载或运行时. 静态链接: 两个主要任务: 1 符号 ...

深入理解计算机系统 Start && 第一章要点

对此书已经慕名已久了,抽空看了第1,2,3,5章,其他章节等有空闲继续看吧. 我的许多博客是给自己快速复习使用的,比如此读书后感,你可以根据我下面的建议读完原书几章再回来复习一下(或许那时候就没必要回 ...

337朱荟潼 Linux&深入理解计算机系统第七章读书笔记——链接

第七章--链接 0.总结 链接编译时可以采用静态链接或动态链接. 连接器主要任务:符号解析和重定位. 多个目标文件可定义相同的符号,可以被连接到一个单独的静态库. 链接器可以生成部分链接的可执行文件 ...

深入理解计算机系统_3e 第九章家庭作业 CS:APP3e chapter 9 homework

9.11 A. 00001001 111100 B. +----------------------------+ | Parameter Value | +--------------------- ...

深入理解计算机系统 第三章 程序的机器级表示 Part2 第二遍

第一遍对应笔记链接/stone94/p/9943779.html 本章汇编代码中常出现的几个指令及其含义 1.push 操作数的个数:1 将操作数(一般 ...

深入理解计算机系统 第三章 程序的机器级表示 Part1 第二遍

第一遍对应笔记链接/stone94/p/9905345.html 机器级代码 计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节. ...

深入理解计算机系统 第三章 程序的机器级表示 part1

如题所示,这一章讲解了程序在机器中是怎样表示的,主要讲汇编语言与机器语言. 学习什么,为什么学,以及学了之后有什么用 我们不用学习如何创建机器级的代码,但是我们要能够阅读和理解机器级的代码. 虽然现代 ...

5202闫佳歆--week 7 深入理解计算机系统第七章--读书笔记

参见上学期的学习笔记: /5202yjx/p/4836058.html

深入理解计算机系统_3e 第二章家庭作业答案

初始完成者:哈尔滨工业大学 李秋豪 许可:除2.55对应代码外(如需使用请联系randy.bryant@cs.cmu.edu),任何人可以自由的使用,修改,分发本文档的代码. 本机环境: (有一些需要 ...

随机推荐

Reverse Linked List II 解答

Question Reverse a linked list from positionmton. Do it in-place and in one-pass. For example:Giv ...

array模块

array模块定义了一种序列数据结构,看起来和list很相似,但是所有成员必须是相同基本类型. 2.1array-固定类型数据序列 array作用是高效管理固定类型数值数据的序列. 2.2.1初始 ...

shell 快速入门

1: 脚本开始行 #!/bin/bash 这一行表明,不管用户选择的是那种交互式shell,该脚本需要使用bash shell来运行. 由于每种shell的语法大不相同,所以这句非常重要. 2:变量 ...

SIMPLE_DEV_PM_OPS宏

SYSTEM_SLEEP_PM_OPS和dev_pm_ops的定义: [cpp]view plaincopy #defineSET_SYSTEM_SLEEP_PM_OPS(suspend_fn, ...

java分布式电子商务云平台b2b b2c o2o需要准备哪些技术??

技术解决方案 开发语言:java.j2ee 数据库:mysql JDK支持版本:JDK1.6.JDK1.7.JDK1.8版本 核心技术:分布式.云服务.微服务.服务编排等. 核心架构: 使用Spr ...

ab,qps 并发连接数

并发连接数 = pv / 统计时间 * 页面衍生连接次数 * http响应时间 * 因数 /其他web服务器数量 pv = 并发连接数 * 统计时间 *其他web服务器数量/ 页面衍生连接次数 ...

shapefile与字符集编码设置

在 ArcGIS Desktop (ArcMap, ArcCatalog, and ArcToolbox) 中,有编码页转换功能(CODE PAGE CONVERSION),可以读写多种字符编码的 s ...

spring cloud学习(三)使用Ribbon实现客户端负载均衡

使用Ribbon实现客户端的负载均衡 * 个人博客空间 : / * Ribbon Spring Cloud Netflix Ribbon 是一个客户端负载均衡的组 ...

如果觉得《深入理解计算机系统李秋豪 《深入理解计算机系统》第7章:重定位PC相对引用的理解...》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。