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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

链接脚本简介

發(fā)布時(shí)間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链接脚本简介 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以下內(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 = .; }



創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的链接脚本简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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