2012-02-29 43 views
4

符號可以在defsym的某些地址鏈接,如圖所示here。我的問題是,是否可以使用部分來完成同樣的工作?也就是說,給定一些.o目標文件,是否可以指定部分將被重定位到的基地址?如何在鏈接時指定節的基地址,或者鏈接後如何指定節的基地址?

或者,是否有可能在最終鏈接之後重新綁定一個節?也就是說,要更改一個二進制文件中的一個段的地址,並將所有受重新定位影響的信息(例如該段的相關分支等)都正確地重新定位。

如果我的問題不清楚,我可以編輯它並添加一張圖片以更好地解釋。

回答

4

從你引用的問題和Linux的標籤來判斷,我假設你正在使用GNU ld

對於GNU ld的簡短回答是肯定的,可以放在特定地址。

較長的答案是,您將需要創建一個自定義鏈接腳本來做到這一點,可以指定-T爲ld。如果您使用gcc作爲圍繞ld的包裝,則需要通過gcc-Wl,選項將鏈接器傳遞給它。

鏈接器腳本必須包括像下面這樣:

SECTIONS { 
    .text 0x08049000 : 
     { 
     foo.o (.text) 
     bar.o (.text) 
     } 
} 

事情需要提防的是,雖然-T選項替換ld使用默認的鏈接腳本。您可能需要修改默認鏈接腳本來執行您想要的操作。可以通過將--verbose選項傳遞給ld而不使用任何其他選項來轉儲默認鏈接描述文件。

有關鏈接腳本的更多信息,請參閱LD Manual

+2

感謝您的回答。我現在正在這樣做:'gcc -std = gnu99 -Wall -Wl, - section-start = .secname = 0xABCDEF Lala.c -o Lala' – 2012-03-11 21:52:46

相關問題