作者art1 (人,原來不是人)
看板C_and_CPP
標題[問題] 函數或變數的外部程式引用(可見/不可見)
時間Sun Dec 4 16:15:24 2016
搞不懂組合語言中.global 假指令的實際意義,換句話說,也就是不知道 c 語言中「可
被其它程式使用的函數或變數」跟「不可被其它程式使用的函數或變數」,在編譯成目的
碼時到底是哪邊不一樣
或是說:對其它程式來說,某程式的函數或變數是「可見」/「不可見」之差異的詳細內
容到底是什麼?
是因為產生的符號表中沒提供 local 函數或變數的對應地址嗎? 那是不是代表使用如下
的指令
arm-elf-objcopy -O binary helloworld helloworld.bin
來產生純粹的可執行機器碼中的任何函數或變數都不能被其它程式使用?因為已經失去對
應表可供查詢?
另一個問題是,用組合語言寫程式時,需要用.global假指令來讓連結器看到自行指定之程
式入口的函式名稱,但用 c 語言寫時就不用,是因為 gcc 編譯器自動幫我們處理好了?
但組譯器不會自動幫我們處理?
--
「看在上帝的份上,我們不能當著孩子的面槍殺他的父親!」
「那我們就連孩子一起幹掉!」
「第一槍打中的是那個天真的孩子,第二槍是抱著孩子的母親。第三槍
停頓了三秒,當難以致信的父親擦拭著臉上愛子的腦漿從震驚中醒轉
過來,慢慢的轉頭看向停車的地方,分辨出是誰在攻擊他後,第三顆
子彈才將他的腦殼打飛。」 ─摘自〈狼群〉
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.64.0.230
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1480839329.A.1EF.html
1F:推 LPH66: C 語言的部份你可以去找 extern 和 static 這兩個關鍵字 12/04 17:18
2F:→ LPH66: (不是 C++ 的 static 喔, 那個另外還有 C++ 特有的意義) 12/04 17:20
※ 編輯: art1 (61.64.0.230), 12/04/2016 17:43:07