linux lds,Linux LDS 文件格式详细分析.pdf
Linux LDS 文件格式詳細分析.pdf
LDS 文件格式分析
連接腳本的格式
====================
連接腳本是文本文件.
你寫了一系列的命令作為一個連接腳本. 每一個命令是一個帶有參數的關鍵字,或者是一個
對符號的賦值. 你可
以用分號分隔命令. 空格一般被忽略.
文件名或格式名之類的字符串一般可以被直接鍵入. 如果文件名含有特殊字符, 比如一般作
為分隔文件名用的逗
號, 你可以把文件名放到雙引號中. 文件名中間無法使用雙引號.
你可以象在 C 語言中一樣,在連接腳本中使用注釋, 用'/*'和'*/'隔開. 就像在 C 中,注釋在語法
上等同于空格.
簡單的連接腳本示例
============================
許多腳本是相當的簡單的.
可能的最簡單的腳本只含有一個命令: 'SECTIONS'. 你可以使用'SECTIONS'來描述輸出文
件的內存布局.
'SECTIONS'是一個功能很強大的命令. 這里這們會描述一個很簡單的使用. 讓我們假設你
的程序只有代碼節,
初始化過的數據節, 和未初始化過的數據節. 這些會存在于'.text','.data'和'.bss'節, 另外, 讓我
們進一
步假設在你的輸入文件中只有這些節.
對于這個例子, 我們說代碼應當被載入到地址'0x10000'處, 而數據應當從 0x8000000 處開始.
下面是一個實現
這個功能的腳本:
SECTIONS
{
. = 0x10000;
.text : { *(.text) }
. = 0x8000000;
.data : { *(.data) }
.bss : { *(.bss) }
}
你使用關鍵字'SECTIONS'寫了這個 SECTIONS 命令, 后面跟有一串放在花括號中的符號賦
值和輸出節描述的內容.
上例中, 在'SECTIONS'命令中的第一行是對一個特殊的符號'.'賦值, 這是一個定位計數器.
如果你沒有以其
它的方式指定輸出節的地址(其他方式在后面會描述), 那地址值就會被設為定位計數器的現
有值. 定位計數器
然后被加上輸出節的尺寸. 在'SECTIONS'命令的開始處, 定位計數器擁有值'0'.
第二行定義一個輸出節,'.text'. 冒號是語法需要,現在可以被忽略. 節名后面的花括號中,你列
出所有應當被
放入到這個輸出節中的輸入節的名字. '*'是一個通配符,匹配任何文件名. 表達式'*(.text)'意
思是所有的輸
入文件中的'.text'輸入節.
因為當輸出節'.text'定義的時候, 定位計數器的值是'0x10000',連接器會把輸出文件中的'.text'
節的地址設
為'0x10000'.
余下的內容定義了輸出文件中的'.data'節和'.bss' 節. 連接器會把'.data'輸出節放到地址
'0x8000000'處. 連接
器放好'.data'輸出節之后, 定位計數器的值是'0x8000000'加上'.data'輸出節的長度. 得到的結
果是連接器會
把'.bss'輸出節放到緊接'.data'節后面的位置.
連接器會通過在必要時增加定位計數器的值來保證每一個輸出節具有它所需的對齊. 在這
個例子中, 為'.text'
和'.data'節指定的地址會滿足對齊約束, 但是連接器可能會需要在'.data'和'.bss'節之間創建一
個小的缺口.
就這樣,這是一個簡單但完整的連接腳本.
簡單的連接腳本命令.
=============================
在本章中,我們會描述一些簡單的腳本命令.
設置入口點.
在運行一個程序時第一個被執行到的指令稱為 入口點". 你可以使用'ENTRY'連接腳本命令
來設置入口點.參數
是一個符號名:
ENTRY(SY
總結
以上是生活随笔為你收集整理的linux lds,Linux LDS 文件格式详细分析.pdf的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公共基础知识:诸子百家之道家
- 下一篇: linux 查看网卡连接网线,查看网卡是