日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux lds,Linux LDS 文件格式详细分析.pdf

發(fā)布時(shí)間:2023/12/15 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux lds,Linux LDS 文件格式详细分析.pdf 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Linux LDS 文件格式詳細(xì)分析.pdf

LDS 文件格式分析

連接腳本的格式

====================

連接腳本是文本文件.

你寫了一系列的命令作為一個(gè)連接腳本. 每一個(gè)命令是一個(gè)帶有參數(shù)的關(guān)鍵字,或者是一個(gè)

對(duì)符號(hào)的賦值. 你可

以用分號(hào)分隔命令. 空格一般被忽略.

文件名或格式名之類的字符串一般可以被直接鍵入. 如果文件名含有特殊字符, 比如一般作

為分隔文件名用的逗

號(hào), 你可以把文件名放到雙引號(hào)中. 文件名中間無法使用雙引號(hào).

你可以象在 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é).

對(duì)于這個(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 命令, 后面跟有一串放在花括號(hào)中的符號(hào)賦

值和輸出節(jié)描述的內(nèi)容.

上例中, 在'SECTIONS'命令中的第一行是對(duì)一個(gè)特殊的符號(hào)'.'賦值, 這是一個(gè)定位計(jì)數(shù)器.

如果你沒有以其

它的方式指定輸出節(jié)的地址(其他方式在后面會(huì)描述), 那地址值就會(huì)被設(shè)為定位計(jì)數(shù)器的現(xiàn)

有值. 定位計(jì)數(shù)器

然后被加上輸出節(jié)的尺寸. 在'SECTIONS'命令的開始處, 定位計(jì)數(shù)器擁有值'0'.

第二行定義一個(gè)輸出節(jié),'.text'. 冒號(hào)是語法需要,現(xiàn)在可以被忽略. 節(jié)名后面的花括號(hào)中,你列

出所有應(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é)具有它所需的對(duì)齊. 在這

個(gè)例子中, 為'.text'

和'.data'節(jié)指定的地址會(huì)滿足對(duì)齊約束, 但是連接器可能會(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è)符號(hào)名:

ENTRY(SY

總結(jié)

以上是生活随笔為你收集整理的linux lds,Linux LDS 文件格式详细分析.pdf的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。