日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年08月10日(星期日)

2021年08月10日 | 1.4.3重定位_使用C語言清除BSS段

發(fā)布者:ArtisticSoul 來源: eefocus關(guān)鍵字:C語言 手機看文章 掃描二維碼
隨時隨地手機看文章

使用C語言清除BSS段,我們肯定要獲取BSS段的起始地址和結(jié)束地址,那么,C語言要怎么實現(xiàn)使用lds文件中的變量abc?


答:需要以下兩步,這兩步是重點。


在函數(shù)中聲明該變量為extern類型(類型不重要,因為我們主要是取值,具體原因后面會說);

使用時,要取址,比如, int *p = &abc;//p的值即為lds中abc的值。

比如下圖中,使用extern聲明代碼段的起始地址和bss段的起始地址,然后取值用指針進行復(fù)制操作,這樣lds中的變量也可以像C語言中的普通變量一樣操作。(實際上,它們和C語言中的變量不同。)

在這里插入圖片描述

在C語言中需要聲明,那么在匯編指令中,為什么可以直接使用?(如下圖,為重定位和清除bss段的匯編代碼)

在這里插入圖片描述

下面開始解答:

在C函數(shù)中,如果我們聲明如下變量。這樣,該變量為全局變量:


int g_i; //程序中必然有四字節(jié)空間來保存這個變量

1

但是,如果我們在lds鏈接文件中聲明了a1,a2,a3…an個變量,那么,.bin文件中是不會保存這些變量的,這是為啥?


答:這是因為C程序中不保存lds文件中的變量(因為一般用不到),而且真正要用到的時候,我們也并不是沒辦法。


我們編譯程序時,有一個symbol table符號表,萬一要用這些變量,可以通過這個符號表在鏈接的時候使用。


以上面為例,除了g_i,我們再聲明兩個變量:


int g_i, g_j, g_k;


那么在鏈接的時候,會有一個符號表如下:

在這里插入圖片描述

畫質(zhì)不好,但是還是能看懂的。這里每個圈表示一個變量,一個變量由名字和地址構(gòu)成。顯然,C語言中的變量,名字即為變量名,地址即為變量的地址。但是,我們前面說過,.bin文件中不會保存lds文件中的變量,所以lds文件中的變量,地址填的是值,名字則還是變量名。 所以,我們在copy2sdram函數(shù)中才要使用取址符號來修飾這個lds變量,因為它的地址才是它的值。


另外,我們要明白。


這個符號表只存在于鏈接時,作用是輔助鏈接,不存在與.bin文件中。

lds文件中,無論變量還是常量,里面的值都來自于鏈接腳本,在鏈接時由編譯器決定。

在使用上,他們和C語言中的普通變量是不同的:


對于g_i,它是一個C語言變量,使用&g_i就可以得到它的地址Addr;

對于lds中的a1,他們沒有地址,因為.bin文件里面不會保存它們,C語言中使用它們時,使用&a1取它們的值。


綜上所述,使用ld中的變量,就是借助symbol table保存lds的變量,使用時加上&得到它們的值。

關(guān)鍵字:C語言 引用地址:1.4.3重定位_使用C語言清除BSS段

上一篇:1.4.2鏈接腳本,位置無關(guān)碼
下一篇:1.5.1異常與中斷_概念引入與處理流程

推薦閱讀

不知道大家有沒有見過在大街上“亂跑”的機器人,也許你覺得很科幻、很高大上。但是事實上,它們特別接地氣!早在去年“618”,京東配送機器人就已經(jīng)在中國人民大學校園內(nèi)穿梭,并最終完成首單配送任務(wù)。未來已來,當智能化之風吹到物流業(yè),國內(nèi)外企業(yè)紛紛嘗鮮無人化配送,也就催生了智能機器人在這一領(lǐng)域施展拳腳。從國外的Woowa Brothers、Starship、Ye...
STM32F070F6P USB HID設(shè)置1、打開STM32CubeMX軟件,選擇“NEW”新建一個工程2、選擇芯片型號STM32F070F6P3、在Swap PA9/10->PA11/12前打勾4、在“USB”下的“Device(FS)”前打勾5、設(shè)置晶振,在“RCC”下的“High Speed Clock(HSE)”下選擇第三項(此芯片需外接晶振)6、在MiddleWares下的USB_DEVICE選擇“Custon Human Interface Device Class(H...
翻譯自——Semiwiki 近期,英特爾公布的第二季度財報超出了分析師普遍預(yù)期。然而,在與管理層的財報電話會議之后,英特爾股價卻暴跌了16%。7位分析師將英特爾的股票評級下調(diào)至賣出股,這些導火索是他們的7納米工藝再次推遲,這意味著英特爾在工藝技術(shù)上被臺積電又甩出了一條街。 在財報電話會議上,英特爾公布的營收:197億美元,高于華爾街的185.4億美元...
據(jù)外媒futurecar報道,近日,來自美國硅谷的激光雷達初創(chuàng)公司Quanergy宣布開發(fā)了一款名為S3的新型固態(tài)激光雷達,使用相控陣技術(shù),并完成100米范圍內(nèi)的探測試驗。Quanergy公司推出的S3型固態(tài)激光雷達是業(yè)內(nèi)第一次采用光學相控陣技術(shù),并將使用可擴展的SOI CMOS制造工藝,將會在未來大規(guī)模量產(chǎn)。該公司表示,未來,此項技術(shù)并不只應(yīng)用于汽車的自動駕駛系統(tǒng)...

史海拾趣

問答坊 | AI 解惑

關(guān)于指令cache和數(shù)據(jù)cache的一些問題

主要想問下,通用的RISC處理器中,指令存儲器和數(shù)據(jù)存儲器是分開的,那么對于取指階段,指令從指令cache中取出,結(jié)果下到數(shù)據(jù)cache中;這個數(shù)據(jù)cache中具體寫的是些什么內(nèi)容呢?這些內(nèi)容的具體作用是做什么用的呢?這個數(shù)據(jù)cache怎樣將結(jié)果被外設(shè)應(yīng) ...…

查看全部問答∨

建議學電子的都看一下這本書---發(fā)明者電子設(shè)計寶典

內(nèi)容簡介: 書的目的在于解釋電子學中很多經(jīng)常被誤解的或者是很少提及的概念,例如電容中的電流位移,怎樣看待光學放大器,光子產(chǎn)生的方式,什么是阻抗匹配等諸如此類的問題。當前很多電子學書籍常常忽略了這些關(guān)鍵點,而它其實是更好的理解電子現(xiàn)象的 ...…

查看全部問答∨

想在廣州找個嵌入式的實習,哪位提供下線索

想在廣州找個嵌入式的實習,哪位提供下線索…

查看全部問答∨

問幾個關(guān)于SIM卡的東西

請問1、USSD,2、GSM string,3、FDN SDN 這三樣東西是什么? 我連是什么都不知道所以不知道怎么下手,請給個基本思路,謝謝…

查看全部問答∨

!求助,關(guān)于stc-isp下載器v4.8以上版本各選項的詳細說明!

百度了半天,還是沒有找到這個版本各中選項的詳細說明,用過的前輩有資料的請指教一下,比如什么\"每次下載重新調(diào)入已在打開在緩沖區(qū)的文件\"....等等等等,十分感謝!…

查看全部問答∨

知名外企(北京)招聘手機基帶工程師,手機電路工程師

招聘手機Baseband Engineer & Electrical Engineer(北京) 職位要求: 1. 本科及以上學歷背景 2. 具有三年以上手機基帶,電路設(shè)計工作經(jīng)驗 3. 英語讀寫能力強。 有意者請與我聯(lián)系: Email:sindyshi@chinacareer.com Tel: 010-58790033-2 ...…

查看全部問答∨

底層開發(fā)程序

有一設(shè)備地址:60.214.117.229  開放端口:10001 該設(shè)備遵循DL/T-645協(xié)議。 請用C++寫一段小程序讀取它的數(shù)據(jù)?!?

查看全部問答∨

外資公司深圳代表處直聘

招聘職位:1〉WinCE GUI 工程師              崗位職責: 嵌入式Wince上層/GUI軟件開發(fā),嵌入式WinCE應(yīng)用軟件開發(fā)               職位要求:     ...…

查看全部問答∨
小廣播
設(shè)計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved