2012-05-07 29 views
3

我一直在爲i386實模式編寫一些「獨立」代碼,並遇到了一些奇怪的錯誤,而PXE網絡啓動我的代碼:爲什麼gnu鏈接程序的'--oformat binary'選項將`.data'段放在0x0200000處

PXE-E79: NBP is too big to fit in free base memory 
PXE-M0F: Exiting Intel Boot Agent. 

後與我的二進制多擺弄我分離它作爲

.data 

段標記後具有任何的數據或代碼。

經過hexdumping之後,我發現ld將指示一路移動到了所有地方的0x0200000

我正在生成我的房子斌用:

ld --oformat binary 

問題:

  1. 爲什麼ld做到這一點?

  2. 是否特定於oformat選項?

回答

1

1)鏈接器可能做到這一點,因爲它覺得它(例如可能用於與80x86的「2 MIB頁」),調整和因爲你沒有提供一個鏈接腳本,說做任何其他比「無論鏈接器感覺如何」。

2)我會假設所有輸出格式都是「無論鏈接器感覺如何」(除非鏈接器被告知其他情況)。

注意:實際行爲可能由隱藏在某處的默認鏈接描述文件決定,也可能是「操作系統的分佈感覺」,而不僅僅是「鏈接器感覺」。

無論如何,如果您希望鏈接器執行某些特定的操作,您需要通過編寫鏈接器腳本來具體告訴鏈接器您想要的內容。如果你實際上已經寫了一個「比必要的不太具體的」鏈接器腳本,那麼你需要使該腳本更具體。

+0

謝謝,我會離開的問題開放,如果有人不知道到底爲什麼它這樣做。儘管感謝您的回答。 – Hawken

+0

你是指2個MiB頁面的含義? – Hawken

0

1-ld使用默認鏈接腳本。嘗試-v看到默認 2,是不特定的oformat 3,要設置其他尺寸則必須使用 -z最大頁面大小= 0X

我試着爲0x100和0x1000的和做工精細,但0x500不。

Salu2 totales

相關問題