深入理解计算机系统李秋豪,《深入理解计算机系统》第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???????????? PROGBITS????????08048330?000330 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:?????? 55?????????????????? ? ? ? ? push?? %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章,其他章節等有空閑繼續看吧. 我的許多博客是給自己快速復習使用的,比如此讀書后感,你可以根據我下面的建議讀完原書幾章再回來復習一下(或許那時候就沒必要回 ...
2013337朱薈潼 Linux&;深入理解計算機系統第七章讀書筆記——鏈接
第七章--鏈接 0.總結 鏈接編譯時可以采用靜態鏈接或動態鏈接. 連接器主要任務:符號解析和重定位. 多個目標文件可定義相同的符號,可以被連接到一個單獨的靜態庫. 鏈接器可以生成部分鏈接的可執行文件 ...
深入理解計算機系統_3e 第九章家庭作業 CS:APP3e chapter 9 homework
9.11 A. 00001001 111100 B. +----------------------------+ | Parameter Value | +--------------------- ...
深入理解計算機系統 第三章 程序的機器級表示 Part2 第二遍
第一遍對應筆記鏈接?https://www.cnblogs.com/stone94/p/9943779.html 本章匯編代碼中常出現的幾個指令及其含義 1.push 操作數的個數:1 將操作數(一般 ...
深入理解計算機系統 第三章 程序的機器級表示 Part1 第二遍
第一遍對應筆記鏈接?https://www.cnblogs.com/stone94/p/9905345.html 機器級代碼 計算機系統使用了多種不同形式的抽象,利用更簡單的抽象模型來隱藏實現的細節. ...
深入理解計算機系統 第三章 程序的機器級表示 part1
如題所示,這一章講解了程序在機器中是怎樣表示的,主要講匯編語言與機器語言. 學習什么,為什么學,以及學了之后有什么用 我們不用學習如何創建機器級的代碼,但是我們要能夠閱讀和理解機器級的代碼. 雖然現代 ...
20135202閆佳歆--week 7 深入理解計算機系統第七章--讀書筆記
參見上學期的學習筆記: http://www.cnblogs.com/20135202yjx/p/4836058.html
深入理解計算機系統_3e 第二章家庭作業答案
初始完成者:哈爾濱工業大學 李秋豪 許可:除2.55對應代碼外(如需使用請聯系randy.bryant@cs.cmu.edu),任何人可以自由的使用,修改,分發本文檔的代碼. 本機環境: (有一些需要 ...
隨機推薦
Reverse Linked List II 解答
Question Reverse a linked list from position?m?to?n. Do it in-place and in one-pass. For example:Giv ...
array模塊
array模塊定義了一種序列數據結構,看起來和list很相似,但是所有成員必須是相同基本類型. 2.1?array-固定類型數據序列 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 plain?copy #define?SET_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實現客戶端的負載均衡 * 個人博客空間 : https://zggdczfr.cn/ * Ribbon Spring Cloud Netflix Ribbon 是一個客戶端負載均衡的組 ...
總結
以上是生活随笔為你收集整理的深入理解计算机系统李秋豪,《深入理解计算机系统》第7章:重定位PC相对引用的理解...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动开发web第一天
- 下一篇: 游戏服务器红点系统,Unity简易的红点