Re: [問題] 為何還有結構存在?
不是linker啦,我還linking loader哩,都不是啦。
我們要來正一下名,那個在入程式用的東西在系統程式裡就只是叫loader,
附帶有目的碼連結功能的可以叫做linking loader。如果你喜歡,是可以自
己寫一個linking loader,發明自己的執行檔格式;我看不出來這樣子有什
麼比利用現成的執行檔格式要好的優點就是了。我不會說前面有人說錯,因
為真的要照著每個人自己說的作法下去硬幹還是可以做出會動的東西,只是
有種種利弊得失,所以Microsoft/Borland不是那樣做。
順便回覆前面有人問要看哪些書才能知道這些,我想最根本的原理應該要看
系統程式課程的課本。不過對於這些歷史演進,我只是剛好恭逢其盛,從小
玩起,看著底下這些東西一步一步演進。可以參考Turbo Pascal/Turbo C++/
Delphi 1-7的程式語言使用手冊,每一個版本都有一章在專門講Borland實作
這些編譯器時,不同變數與資料型態在記憶體中是怎樣安排的。然後搭配上
多年的反組譯與CPU指令層次追蹤程式的經驗,就會明白事情是如何了。
盒裝的Visual Studio多半沒紙印的說明書,即使知道有MSDN可以查,面對
那麼多東西,可能也不知道如何查起。我是沒有去查過,只能從自己追蹤程
式的經驗上來說,VC++跟Borland的C++編譯器產品的作法不會差太多。
你要講6502上Apple DOS 3.3/ProDOS 1.0的程式載入,還是要講X86上
MSDOS 2.0~7.x,Win16/Win32上的程式載入,我都可以講,不過這邊是C#
討論區,我不要講那麼遠,上面這堆裡頭只有.COM的MSDOS執行檔是依你說的
那個方式在載入的。在.COM的情形下,那個也不是linker,linker是那個把
一堆編譯好後的目的碼跟程式庫連結成執行檔的東西。
課本上有的東西,就不用我多講了。
※ 引述《virdust2003 (替機殼洗個熱水澡)》之銘言:
: 不好意思,我手邊沒書,但 Load的時候 不是會要到一塊長長的記憶體,
: 接下來 Linker 把 Data(一開始宣告好的)、Code從頭開始填入,
: 然後 SP 指到最後的位址,
: 這裡我是把 那塊長長的記憶體稱為 Stack,這樣有錯嗎?
: 還是你指的Stack 是另外一個Frame,所以才有差別,
: 可是早期的時候不是只有一個Frame嗎?(.com的情況)
: 沒想到會在C#版討論這個^^~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.222.17.194
※ 編輯: Aurim 來自: 61.222.17.194 (07/14 19:39)
推
219.91.84.248 07/14, , 1F
219.91.84.248 07/14, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 7 之 7 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章
20
55