jollen.org

Jollen 的 Blog
Jollen's email: jollen # jollen.org
more:  Jollen's Training

小結 Program Loading 觀念

.作者:jollen/
.日期:March 23, 2007 10:56 AM


由「Program Loading」專欄所得到的觀念如下。

外部程式(stored program)的執行是透過 fork system call,先將 current process 複製一份成為他的 child process。接著再透過 exec system call 將外部程式的 ELF image 載入,並取代原來的 process。Kernel ELF loader 會讀取 ELF image,並將 text segment 與 data segment 重新 mapping,接著再找到程式的 program interpreter。

外部程式的最初執行是由 program interpreter 開始,program interpreter 透過 dynamic segment 完成 dynamic linking,此時完整的 process image 已建立完成;program interpreter 再跳到程式的進入點,也就是 C run-time library(crt?.o)。

以上二段文字說明了 program loading 的核心觀念,每一句子觀念都能做出一份不算短的分析報告;此階段只整理出 program loading 的主要重點,接著再把「dynamic linking」的主要觀念做研究後,大家應該就可以大致掌握「程式執行」的系統行為了。

另外,補充 program interpreter 的幾個觀念:

  • program interpreter(ld.so)的存在形式有 shared object 與獨立執行檔二種。
  • 當 program interpreter 是以獨立執行檔執行時,表示將 program interpreter 當成 dynamic loader/linker 來使用;通常是經由使用者直接下指令的方式來執行,program interpreter 在發展與測試階段時也使用這種方式。
  • 當 program interpreter 是以 shared object 形式存在時,表示 program interpreter 是經由 kernel 來取得控制權;這種方式是將 program interpreter 當成 dynamic linker 來使用,這是較常見的做法。

以下是將 program interpreter 當做獨立執行檔的使用範例:

$ ldd hello
        libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
$ /lib/ld-linux.so.2 ./hello
Hello, World!

關於 program loading 的分享到此做個小結,接下來將會整理有關 dynamic linking 的日記。

Tags:

純手工打造說明:技術專欄文章為 Jollen 原創,內容皆為人工撰寫,無 AI 生成。轉載請註明出處與作者,並全文引用。轉載時請在文章開頭或結尾明顯處註明「本文出處:https://www.jollen.org,已取得原作者同意並授權使用。」
訂閱電子報:不定期 Jollen's Blog 精選文章隨 Moko365 電子報寄送;請透過 Moko365 電子報訂閱(可隨時取消)。

Copyright(c) 2001–2007 www.jollen.org. All rights reserved.
Last update: 2026-07-22