新聞中心
1.引言

在玉屏等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需求定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),玉屏網(wǎng)站建設(shè)費(fèi)用合理。
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,Linux系統(tǒng)作為一種開源、免費(fèi)的操作系統(tǒng)在眾多開發(fā)者中越來越受到青睞。Linux系統(tǒng)采用的是模塊化的架構(gòu),通過鏈接多個(gè)模塊來組成一個(gè)完整的程序。而LDS鏈接腳本則是連接這些模塊的關(guān)鍵。
2.LDS鏈接腳本是什么
LDS鏈接腳本是以鏈接命令語言(Linker Command Language,LCL)為基礎(chǔ)編寫的一種腳本文件。它主要用于連接可執(zhí)行文件、共享庫以及目標(biāo)文件等。
LDS鏈接腳本是由GCC編譯器提供的一個(gè)鏈接器腳本語言,可以控制鏈接器在連接二進(jìn)制文件時(shí)的行為。它是一種文本文件,可以用文本編輯器進(jìn)行修改。
3.LDS鏈接腳本的作用
LDS鏈接腳本主要用于控制鏈接器的行為,包括內(nèi)存分配、符號(hào)解析、代碼定位、節(jié)(section)分配等。下面分別對(duì)這些行為進(jìn)行解釋:
3.1內(nèi)存分配
鏈接器決定了二進(jìn)制程序在內(nèi)存中的分布方式,這是非常重要的一個(gè)環(huán)節(jié)。LDS鏈接腳本通過定義內(nèi)存分配區(qū)域(memory region)來指定程序在內(nèi)存中的存儲(chǔ)方式和順序。比如,我們可以在LDS鏈接腳本中定義將某一段代碼或數(shù)據(jù)存儲(chǔ)在一個(gè)特定的內(nèi)存區(qū)域中。
3.2符號(hào)解析
符號(hào)是指在程序中使用的變量名、函數(shù)名等。LDS鏈接腳本通過定義符號(hào)表(symbol table)來告訴鏈接器如何解析符號(hào)。符號(hào)表中包含了每個(gè)符號(hào)的名稱、類型、位置等信息。當(dāng)程序引用某個(gè)符號(hào)時(shí),鏈接器就可以通過符號(hào)表找到這個(gè)符號(hào)在程序中的位置。
3.3代碼定位
對(duì)于程序中的代碼段,LDS鏈接腳本可以通過定義代碼段地址使之被正確的定位。這也是程序運(yùn)行的基礎(chǔ)。
3.4節(jié)(section)分配
節(jié)是指程序源文件中被編譯器處理的單元,比如.text節(jié)包含了源文件中的代碼,.data節(jié)包含了程序中的全局變量。在LDS鏈接腳本中可以對(duì)這些節(jié)進(jìn)行分配,指定它們被放置在內(nèi)存的哪個(gè)位置。
4.LDS鏈接腳本文件的結(jié)構(gòu)
一個(gè)LDS鏈接腳本文件主要分為以下四個(gè)部分:
4.1頭部
LDS鏈接腳本文件的頭部用于定義一些使用到的常量、變量、宏等。
4.2內(nèi)存段定義
內(nèi)存段定義,則是用來定義內(nèi)存分配區(qū)域以及程序在內(nèi)存中的存儲(chǔ)順序。常用的內(nèi)存段包括.text、.data、.rodata以及.bss等。每個(gè)內(nèi)存段對(duì)應(yīng)著程序中的一部分,而LDS鏈接腳本則通過定義內(nèi)存段來指定每個(gè)內(nèi)存段的存儲(chǔ)位置。
4.3符號(hào)表定義
符號(hào)表定義用于定義程序中使用的符號(hào)。符號(hào)表中包含了每個(gè)符號(hào)的位置、大小、類型等信息。符號(hào)表是程序在鏈接時(shí)完成符號(hào)解析的關(guān)鍵輔助工具,鏈接器可以通過符號(hào)表找到符號(hào)在程序中的位置。
4.4節(jié)(section)分配
節(jié)分配用于分配節(jié)在程序中的存儲(chǔ)位置。在LDS鏈接腳本文件中可以通過指定節(jié)的地址來控制程序編譯后生成的二進(jìn)制程序的內(nèi)存分布。
5.LDS鏈接腳本的編寫
LDS鏈接腳本屬于高級(jí)的工具,編寫時(shí)需要對(duì)鏈接器的一些細(xì)節(jié)有所了解。在編寫LDS鏈接腳本的過程中,需要注意以下幾點(diǎn):
5.1使用注釋
注釋可以對(duì)腳本文件進(jìn)行解釋,提高代碼的可讀性。
5.2定義內(nèi)存段
定義內(nèi)存段是LDS鏈接腳本中最為重要的一步。內(nèi)存段定義包括段在內(nèi)存中的地址空間、內(nèi)存屬性等等。對(duì)于.text段和.data段,在定義時(shí)要盡量滿足對(duì)應(yīng)緩存的一致性和對(duì)程序的啟動(dòng)時(shí)間進(jìn)行優(yōu)化。
5.3定義符號(hào)表
定義符號(hào)表是保證程序正常鏈接的關(guān)鍵步驟。符號(hào)表中包含了程序中使用的符號(hào)、函數(shù)以及變量的定義。在定義符號(hào)表時(shí),需要注意符號(hào)的使用場景和符號(hào)的命名。
5.4集成其他源文件
LDS鏈接腳本可以集成其他的LDS文件或其他的鏈接器文件,以實(shí)現(xiàn)更為復(fù)雜的鏈接操作。
6.
LDS鏈接腳本是GNU鏈接器系統(tǒng)(GNU ld)中的一個(gè)重要組成部分,是控制程序鏈接的關(guān)鍵工具。對(duì)于程序編譯者而言,了解LDS鏈接腳本的基礎(chǔ)知識(shí)是非常有必要的。本文從LDS鏈接腳本的定義、作用、結(jié)構(gòu)以及編寫這幾個(gè)方面進(jìn)行了介紹,希望對(duì)讀者有所啟發(fā)和幫助。
相關(guān)問題拓展閱讀:
- Linux shell有哪些類型?Linux基礎(chǔ)教程
Linux shell有哪些類型?Linux基礎(chǔ)教程
shell是一門腳本語言,即shell腳本,shell也是解釋執(zhí)行的腳本語言,可直接調(diào)用Linux命令,所以它在Linux系統(tǒng)中有著非常重襲激旅要的作用。那么Linux
shell有哪些類型?我們來看看吧。
shell腳本語言是弱類型語言,無需定義變量的類型就可使用,主要有兩大類:bourne shell、C shell。
之一種:Bourne shell
Bourne shell又包括Bourne shell (sh)、Korn shell (ksh)、Bourne Again
Shell(bash)三種類型。
Bourne shell (sh)由AT&T的Steve Bourne開發(fā),是標(biāo)準(zhǔn)的拍凳UNIX Shell,很多UNIX系統(tǒng)都配有sh。
Korn shell (ksh)由David Korn開發(fā),是Bourne
shell(sh)的超,并且添加了csh引入的新功能,是目前很多UNIX系統(tǒng)標(biāo)準(zhǔn)配置的Shell,在這些系統(tǒng)上的/bin/sh往往是指向/bin/ksh的符號(hào)鏈接。
Bourne Again
Shell即bash由GNU項(xiàng)目組開發(fā),主要目標(biāo)是與POSIX標(biāo)準(zhǔn)保持一致,同時(shí)兼顧對(duì)sh的兼容,bash從csh和ksh借鑒了很多功能,是各種Linux發(fā)行版默認(rèn)配置的Shell,在Linux系統(tǒng)上的/bin/sh往往是指向/bin/bash的符號(hào)鏈接。雖然如此,bash和sh還是有很多的不同,一方面,bash擴(kuò)展了一些命令和參數(shù),另一方面,bash并不完全和sh兼容,它們有些行為并不一致,但大多數(shù)企業(yè)運(yùn)維的情況下區(qū)別不大,特殊場景可以使用bash替代sh。
第二種:C shell
C shell又包括csh、tcsh兩種類型。
csh由Berkeley大學(xué)開發(fā),隨BSD UNIX發(fā)布,它的流程控制語句很像C語言,支持很多Bourne
Shell所不支持的功能,例如:作業(yè)控制、別名、系統(tǒng)算術(shù)、命令歷史、命令行編輯等。
tcsh是csh的增強(qiáng)版,加入了命令補(bǔ)全等功能,在FreeBSD、Mac OS X等系統(tǒng)上替代了csh。
以上介紹的這些Shell中,較為通用的是標(biāo)準(zhǔn)的Bourne shell (sh)和C shell (csh)。其中Bourne shell
(sh)已經(jīng)被Bourne Again shell (bash) 取代。
可通過以下命令查看CentOS7系統(tǒng)的Shell支持情鉛舉況。
# cat /etc/shells
/bin/sh #
/bin/bash #
/usr/bin/sh
/usr/bin/bash
Linux系統(tǒng)中的主流Shell是bash,bash是由Bourne
關(guān)于linux下的lds鏈接腳本基礎(chǔ)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開通再付費(fèi)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)-網(wǎng)站建設(shè),軟件開發(fā)老牌服務(wù)商!微信小程序開發(fā),APP開發(fā),網(wǎng)站制作,網(wǎng)站營銷推廣服務(wù)眾多企業(yè)。電話:028-86922220
網(wǎng)頁名稱:Linux下的LDS鏈接腳本基礎(chǔ)簡介 (linux下的lds鏈接腳本基礎(chǔ))
網(wǎng)址分享:http://www.dlmjj.cn/article/dpcdjco.html


咨詢
建站咨詢
