2012-03-22 56 views
1

我想知道在鏈接腳本中定義符號有什麼用處。使用鏈接腳本來安排不同的部分是可以理解的,但在腳本中定義新的符號對我來說並不清楚。我正在閱讀一篇使用鏈接器腳本的文章,該腳本定義了兩個新的符號,但這些符號在鏈接器腳本或文章中的其他地方未被引用。一個例子是使用在bss部分SBSS和EBSS符號,如下所示:在鏈接器腳本中定義符號有什麼用處?

ENTRY (loader) 
SECTIONS 
{ . = 0x00100000; 
    .text ALIGN (0x1000) : 
    { 
     *(.text) 
    } 
    .rodata ALIGN (0x1000) : 
    { 
     *(.rodata*) 
    } 
    .data ALIGN (0x1000) : 
    { 
     *(.data) 
    } 

    .bss : 
    { 
     sbss = .; 
     *(COMMON) 
     *(.bss) 
     ebss = .; 
    } 
} 

有其它符號也被頻繁使用的比如etext DATAEND等請解釋使用時定義這樣的符號的它們在腳本中的任何地方都沒有引用。

回答

0

vjain27,

我不知道爲什麼作爲例子鏈接腳本定義了一個將定義符號。這主要是爲了讓可執行文件知道某個部分的開始和結束。如果需要複製數據或以其他方式在內存中操作數據,這非常有用。

0

當寫一個x86引導程序,我想要的圖像,通過使用爲512個字節的倍數:

。 = ALIGN(512);

在鏈接描述文件中。

但是後來我需要一些方法來知道確切的大小,並將其傳遞給我的啓動代碼的al,這將啓動一個int 13h BIOS調用,將數據從硬盤加載到內存。所以我寫了類似於:

__stage2_size = .; 
BYTE((ALIGN(.)/512) - 1); 
. = ALIGN(512); 

並在引導腳本上使用__stage2_size

相關問題