符號可以在defsym
的某些地址鏈接,如圖所示here。我的問題是,是否可以使用部分來完成同樣的工作?也就是說,給定一些.o
目標文件,是否可以指定部分將被重定位到的基地址?如何在鏈接時指定節的基地址,或者鏈接後如何指定節的基地址?
或者,是否有可能在最終鏈接之後重新綁定一個節?也就是說,要更改一個二進制文件中的一個段的地址,並將所有受重新定位影響的信息(例如該段的相關分支等)都正確地重新定位。
如果我的問題不清楚,我可以編輯它並添加一張圖片以更好地解釋。
符號可以在defsym
的某些地址鏈接,如圖所示here。我的問題是,是否可以使用部分來完成同樣的工作?也就是說,給定一些.o
目標文件,是否可以指定部分將被重定位到的基地址?如何在鏈接時指定節的基地址,或者鏈接後如何指定節的基地址?
或者,是否有可能在最終鏈接之後重新綁定一個節?也就是說,要更改一個二進制文件中的一個段的地址,並將所有受重新定位影響的信息(例如該段的相關分支等)都正確地重新定位。
如果我的問題不清楚,我可以編輯它並添加一張圖片以更好地解釋。
從你引用的問題和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。
感謝您的回答。我現在正在這樣做:'gcc -std = gnu99 -Wall -Wl, - section-start = .secname = 0xABCDEF Lala.c -o Lala' – 2012-03-11 21:52:46