<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
程式構建過程的第二個階段就是連結,連結過程輸入的是目標檔案的集合。每個目標檔案可以被看作單個原始碼檔案的二進位制儲存版本,需要為程式記憶體對映提供各種各樣的節(程式碼.text 初始化資料.data 未初始化資料.bss 和唯讀資料.rdata),連結器的最終任務是將獨立的節組合成最終的程式記憶體對映節,與此同時解析所有的參照。
連結過程包括一系列階段(重定位、解析參照),接下來我們介紹這些階段。
連結過程的第一個階段僅僅進行拼接,其過程是將分散在單獨目標檔案中不同型別的節拼接到程式記憶體對映節中。
如圖,為了完成任務,需要將之前預留的空間,也就是節中從0開始的地址範圍轉換成最終程式記憶體對映中更具體的地址範圍。
現在我們來看連結過程中最難的部分,將節的地址範圍線性地轉換成程式記憶體對映地址範圍。相比來說,更艱鉅的任務在於為不同的部分的程式碼建立關聯,使得程式成為一個整體。
function.h程式碼:
#pragma once #define FIRST_OPTION #ifdef FIRST_OPTION #define MULTIPLIER (3.0) #else #define MULTIPLIER (2.0)#endif float add_and_multiply(float x,float y);
function.c
//#include "function.h" int nCompletionStatus = 0; float add(float x,float y) { float z = x + y; return z; } float add_and_multiply(float x,float y) { float z = add(x,y); z *= 3; return z; }
main.c
#include "function.h" extern int nCompletionStatus; int main(int argc,char* argv[]) { float x = 1.0; float y = 5.0; float z; z= add_and_multiply(x,y); nCompletionStatus =1; return 0; }
在上例程式碼中
該問題如圖描述:
function.o
main.o
為了解決這類問題,我們需要在連結階段就對這些參照進行解析,此時連結器需要:
程式記憶體對映圖
gcc -c function.c main.c
gcc function.o main.o -o demoApp
反組合main.o檔案
objdump -D -M intel main.o
劃紅線的是跳轉自身,是因為連結器不知道函數的地址。先用偽地址代替。
反組合demoApp
objdump -D -M intel demoApp
畫紅線的位置分別是add_and_multiply 地址為11aa 和nCompletionStatus的地址。
執行下面命令檢視,看到nCompletionStatus地址為4014.
objdump -x -j .bss demoapp
到此這篇關於C/C++程式連結與反組合工具objdump的使用介紹的文章就介紹到這了,更多相關C++程式連結內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45