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

關於C語言程式中作業系統最初開始執行的位址(進入點,entry point),下列何者正確?

  1. A一定是main函式的開頭
  2. B固定是執行檔的第一個位元組
  3. C通常不是main,而是_start等啟動用的程式碼,完成初始化後才呼叫main
查看答案與解析

正確答案:C. 通常不是main,而是_start等啟動用的程式碼,完成初始化後才呼叫main

連結器會將C執行期(runtime)所提供的啟動用目的檔(crt1.o等)嵌入程式,並以其中的_start作為入口。_start會從堆疊取出命令列引數,進行標準函式庫與全域物件的初始化後,才呼叫main。main返回後,則使用其回傳值呼叫exit,進行結束處理。

  • A. 在main之前會先執行準備的處理。
  • B. 入口位址是記錄在ELF標頭中。
  • C. 正確。是C執行期所提供的啟動程式碼。
練習這個領域 前往領域頁面

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

  1. C語言的main函式以「return 3;」結束時,該值3一般會如何處理?
  2. 對執行檔使用strip指令時會發生的事,下列何者正確?
  3. 關於連結器對弱符號(weak symbol)的處理,下列何者正確?
  4. C++編譯器在函式名稱上附加參數型別等資訊以產生符號名稱的「名稱修飾(name mangling)」,其主要目的為下列何者?
  5. Linux的dlopen函式(相當於Windows的LoadLibrary)的用途,下列何者最為適切?

這個領域的比較