連結器與載入器與執行檔格式

啟動程式時(Linux的execve等),作業系統的載入器所進行的事項,下列何者正確?

  1. A讀取原始碼,當場編譯後再執行
  2. B依照執行檔的程式標頭,將各部分配置到記憶體,並在堆疊上準備引數等,再從入口位址開始執行
  3. C先將執行檔的所有符號名稱顯示在畫面上再執行
查看答案與解析

正確答案:B. 依照執行檔的程式標頭,將各部分配置到記憶體,並在堆疊上準備引數等,再從入口位址開始執行

載入器會讀取執行檔的標頭,將程式標頭所記載的各部分(區段,segment)附上讀取、寫入、執行的權限,對應到虛擬位址空間。接著準備BSS用的0值區域與堆疊,並將命令列引數與環境變數推入堆疊。若是動態連結,就從動態連結器開始,否則從執行檔的入口位址開始執行。

  • A. 執行檔本身已經是機器碼。
  • B. 正確。記憶體的準備與開始執行是載入器的工作。
  • C. 不會顯示符號名稱。
練習這個領域 前往領域頁面

連結器與載入器與執行檔格式的其他題目

  1. 關於C語言程式中作業系統最初開始執行的位址(進入點,entry point),下列何者正確?
  2. C語言的main函式以「return 3;」結束時,該值3一般會如何處理?
  3. 對執行檔使用strip指令時會發生的事,下列何者正確?
  4. 關於連結器對弱符號(weak symbol)的處理,下列何者正確?
  5. C++編譯器在函式名稱上附加參數型別等資訊以產生符號名稱的「名稱修飾(name mangling)」,其主要目的為下列何者?

這個領域的比較