lds linux下的通用鏈結指令碼

2021-06-05 08:44:18 字數 3084 閱讀 4237

elf(executable and linkable format)格式,linux平台下十分常見的可執行、可連線檔案。

輸出section的丟棄:

例子,.foo ,如果沒有任何乙個輸入檔案包含.foo section,那麼聯結器將不會建立.foo輸出section。但是如果在這些輸出section描述內包含了非輸入section描述命令(如符號賦值語句),那麼聯結器將總是建立該輸出section。

有乙個特殊的輸出section,名為/discard/,被該section引用的任何輸入section將不會出現在輸出檔案內,這就是discard的意思吧。如果/discard/ section被它自己引用呢?想想看。

/discard/ :   

sections             //所有檔案的**段鏈結成乙個.text的**段

.rodata align(4) :

.data align(4) :          //所有檔案的資料段鏈結成乙個.text的資料段,4位元組對齊

.bss align(4)  :

}

.bss節

•這個節包含程式還未初始化的資料,也就是說,包含沒有初值的那些變數。當作業系統裝入這個程式時將把這些變數都置為0

•使用.bss比使用.data的優勢在於,.bss節在編譯後不占用磁碟的空間,這樣編譯、連線生成的**的尺寸會比較小。

關鍵字at()--------輸出section的lma :預設情況下,lma等於vma,但可以通過關鍵字at()指定lma.

特殊符號名'.'表示定位計數器. 你只可以在'sections'命令中使用它.

輸入節中的普通符號.

-----------------------------------

對於普通符號,需要乙個特殊的標識, 因為在很多目標格式中, 普通符號沒有乙個特定的輸入節. 聯結器會把

普通符號處理成好像它們在乙個叫做'common'的節中.

你可能像使用帶有其他輸入節的檔名一樣使用帶有'common'節的檔名。你可以通過這個把來自乙個特定輸

入檔案的普通符號放入乙個節中,同時把來自其它輸入檔案的普通符號放入另乙個節中。

在大多數情況下,輸入檔案中的普通符號會被放到輸出檔案的'.bss'節中。比如:

.bss

有些目標檔案格式具有多於乙個的普通符號。比如,mips elf目標檔案格式區分標準普通符號和小普通符號。

在這種情況下,聯結器會為其他型別的普通符號使用乙個不同的特殊節名。 在mips elf的情況中, 聯結器

為標準普通符號使用'common',並且為小普通符號使用'.common'。這就允許你把不同型別的普通符號對映到

記憶體的不同位置。

在一些老的連線指令碼上,你有時會看到'[common]'。這個符號現在已經過時了, 它等效於'*(common)'

輸出節lma

..................

每乙個節有乙個虛位址(vma)和乙個載入位址(lma);出現在輸出節描述中的位址表示式設定vms

聯結器通常把lma跟vma設成相等。你可以通過使用『at』關鍵字改變這個。跟在關鍵字『at』後面的表示式

lma指定節的載入位址。或者,通過`at>lma_region'表示式, 你可以為節的載入位址指定乙個記憶體區域。

這個特性是為了便於建立rom映像而設計的。比如,下面的連線指令碼建立了三個輸出節:乙個叫做『.text』

從位址『0x1000』處開始,乙個叫『.mdata』,儘管它的vma是'0x2000',它會被載入到'.text'節的後面,最

後乙個叫做『.bss』是用來放置未初始化的資料的,其位址從'0x3000'處開始。符號'_data'被定義為值

'0x2000', 它表示定位計數器的值是vma的值,而不是lma。

sections

.mdata 0x2000 :

at ( addr (.text) + sizeof (.text) )

.bss 0x3000 :

}

eg:

sections

.rodata align(4) :

.data align(4) :

.bss align(4)  :

}

eg:

沒有at()指定,節的執行位址,與儲存位址一致。0xb0004000 為執行位址,at(2048)為儲存位址。不一致。

eg:

sections

second    0xb0004000 : at(2048)

}

eg:

sections

. = 0x30000000;

.text : at(4096)

.rodata align(4) : at((loadaddr(.text)+sizeof(.text)+3)&~(0x03))

.data align(4)   : at((loadaddr(.rodata)+sizeof(.rodata)+3)&~(0x03))

__bss_start = .;

.bss align(4)  :

__bss_end = .;

}

通用資料鏈結 UDL 的用法

偶然看到udl,決定看一下其用法。udl 通用資料鏈結。此檔案中提供 oledbconnection 的連線資訊。也就是說udl只能在oledbconnection中使用。微軟不建議使用udl 因為udl 檔案未加密,會以明文形式公開連線字串資訊。因為 udl 檔案對您的應用程式來說是乙個基於檔案的...

Centos下的Openssh漏洞修復(指令碼)

通過主機掃瞄發現系統存在openssh漏洞,具體漏洞如下 openssh sshd 安全漏洞 cve 2015 8325 openssh 拒絕服務漏洞 cve 2016 0778 openssh sshd 許可權許可和訪問控制漏洞 cve 2015 5600 openssh 遠端 執行漏洞 cve ...

Linux下重啟多個 tomcat 服務的指令碼

由於修改tomcat的配置檔案或手動運算元據庫資料後,tomcat的快取和redis的快取很嚴重,需要經常重啟tomcat來釋放快取,經常就是手動重啟。1 查詢tomcat的程序id ps ef grep tomcat 2 根據路徑去查詢程序id,然後逐個殺掉 畢竟一台伺服器上面是會有多個不同業務的...