链接脚本简介
以下內(nèi)容源于朱有鵬《物聯(lián)網(wǎng)大講堂》課程,如有侵權(quán),請告知?jiǎng)h除。
1、程序段的概念:代碼段(.text)、數(shù)據(jù)段(.data)、bss段(ZI段)、自定義段
(1)段是指程序的某部分。
- 把整個(gè)程序分成許多段,給每個(gè)段起一個(gè)名字,在鏈接時(shí)用這個(gè)名字來指示這些段。
- 給段命名,就是為了在鏈接腳本中,讓段站在合適的位置。
(2)段名分為2種:一種是編譯器鏈接器內(nèi)部定好的,先天性的名字;一種是程序員自己指定的、自定義的段名。
- 先天性段名:
代碼段:(.text) ?,又叫文本段,代碼段其實(shí)就是函數(shù)編譯后生成的東西;
數(shù)據(jù)段:(.data),數(shù)據(jù)段就是C語言中有顯式初始化為非0的全局變量;
bss 段:(.bss) ,又叫ZI(zero initial)段,即零初始化段,對應(yīng)C語言中初始化為0(或者沒有顯式初始化)的全局變量。
- 后天性段名:
(3)C語言中全局變量如果未顯式初始化,值是0。
- 本質(zhì)就是C語言把這類全局變量放在了bss段,從而保證了為0;
(4)如何保證顯式初始化為非0的全局變量的值在main之前就被賦值了?
- 這類變量放在.data段中,而.data段會在main執(zhí)行之前被處理(初始化)。
2、鏈接腳本的作用
(1)鏈接腳本是一個(gè)規(guī)則文件,用來指揮鏈接器工作。
- 鏈接器會參考鏈接腳本,使用其中的規(guī)則來處理.o文件中那些段(一般情況下,每個(gè).o文件會包含若干個(gè)段,而不是只有某個(gè)段),將其鏈接成一個(gè)可執(zhí)行程序。
(2)鏈接腳本的關(guān)鍵內(nèi)容有2部分:段名 + 地址(作為鏈接地址的內(nèi)存地址)
(3)鏈接腳本的理解:
SECTIONS {} ? ? ??這個(gè)是整個(gè)鏈接腳本
. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?點(diǎn)號在鏈接腳本中代表當(dāng)前位置
= ? ? ? ? ? ? ? ? ? ? ? ? ? ? 等號代表賦值
(4)舉例如下(代碼的內(nèi)容是鏈接到以0xd0024000開始的空間。)
SECTIONS {. = 0xd0024000;//地址.text : {//段名start.o* (.text)}.data : {* (.data)}bss_start = .; .bss : {* (.bss)}bss_end = .; }
總結(jié)
- 上一篇: 计算机生存代码,方舟生存进化OL代码大全
- 下一篇: abaqus如何并行计算_Abaqus软