彙編來源程式的組織圖

來源:互聯網
上載者:User

一般情況下,一個彙編來源程式需要定義3個段:
.text
.data
.bss
這個源自UNIX的傳統(和a.out的結構有關)。
不過在現在的LINUX裡,這三個部分不叫“段”(segment),而叫作“區”(section)。

這可能和Linux使用ELF(Execution and Linking Format)有關吧:
一個ELF格式的可執行程式通常劃分為如下幾個部分:
.text、.data 和 .bss,其中
.text 是唯讀代碼區,
.data 是可讀可寫的資料區,
.bss 則是可讀可寫且沒有初始化的資料區。

代碼區和資料區在ELF中統稱為section,根據實際需要你可以使用其它標準的section,也可以添加自訂section,但一個 ELF 可執行程式至少應該有一個.text 部分。

彙編(器)指示:
來源程式裡的這些以“.”英文句點開頭的.text,.data,.bss等是用來向組譯工具傳遞資訊的,叫做“彙編(器)指示”。
.text告訴彙編器,其後的內容屬於代碼區,唯讀屬性。
.data告訴彙編器,其後的內容屬於具有初值的資料區,可讀可寫。
.bss告訴彙編器,其後的內容屬於不具有初值的資料區,可讀可寫。

當彙編器遇到一個新的聲明某個區的彙編指示時,老的區就結束了,同時開始一個新的區。
.text,.data,.bss等彙編指示是可以多次反覆出現的。

此外還有其他一些特定的區:
.rdata
存放唯讀資料(常量),英文叫做read-only data。

MIPS還有專門的預設使用$gp定址的區:
.sdata
具有初值的小資料區,可讀可寫。英文叫做small data。
.sbss
不具有初值的資料區,可讀可寫。英文叫做small common objects.
.lit8
存放64位浮點數(implicit-constant)。
.lit4
存放32位浮點數(implicit-constant)。

.sdata,.sbss,.lit8,.lit4都預設使用$gp定址。

相同類型的區最後都會被串連程式按類型合并到一起,在可執行檔裡組成單一的.text區,.data區和.bss區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.