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