生活随笔
收集整理的這篇文章主要介紹了
可重定位目标文件
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【0】GCC將源代碼轉(zhuǎn)化成可執(zhí)行代碼的流程
- (1)C預(yù)處理器cpp擴展源代碼,插入所有用#include命令指定的文件,并擴展聲明的宏;
- (2)編譯器ccl產(chǎn)生兩個源代碼的匯編代碼:*.s;
- (3)匯編器as將匯編代碼轉(zhuǎn)化為二進(jìn)制目標(biāo)代碼 :*.o ; (目標(biāo)代碼是機器代碼的一種形式,它包含所有指令的二進(jìn)制表示,但沒有填入地址的全局值)
- (4)鏈接器ld將目標(biāo)代碼與實現(xiàn)庫函數(shù)的代碼合并,最終產(chǎn)生可執(zhí)行代碼文件;
【1】第一步,源碼演說
【2】生成目標(biāo)文件p107.o 及對其反匯編
2.1) gcc -O1 -c p107.c 》》 產(chǎn)生目標(biāo)文件 p107.o (注意,此時還沒有鏈接)
2.2) objdump -d p107.o >> p107-obj-dis.s 反匯編目標(biāo)文件p107.o 得到 p107-obj-dis.s 如下:
【3】生成可執(zhí)行文件p107及對其反匯編
3.1) gcc -O1 -o p107 p107.o p107-main.c 生成可執(zhí)行文件p107(注意, 此時已經(jīng)經(jīng)過鏈接過程了)
3.2) objdump -d p107 >> p107-exe-dis.s 反匯編可執(zhí)行文件 p107 , 得到p107-exe-dis.s 匯編文件,該文件內(nèi)容如下:
【4】比較p107-obj-dis.s 和 p107-exe-dis.s
【總結(jié)】
一句話說完,重定位目標(biāo)文件是匯編器 使用編譯器輸出的匯編語言輸出的二進(jìn)制目標(biāo)文件, 要知道目標(biāo)文件使用的是相對物理(內(nèi)存)地址,重定位的目的就是變相對物理地址到絕對物理地址。(bingo)
總結(jié)
以上是生活随笔為你收集整理的可重定位目标文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。