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

在沒有作業系統的微控制器上,通電後啟動程式碼在呼叫main之前所進行的處理,下列何者正確?

  1. A將.text的機器碼全部從RAM寫回快閃記憶體
  2. B讀出RAM的內容,還原上次斷電時的變數值
  3. C將.data的初始值從快閃記憶體複製到RAM,並將.bss的區域以0填滿
查看答案與解析

正確答案:C. 將.data的初始值從快閃記憶體複製到RAM,並將.bss的區域以0填滿

斷電後RAM的內容會消失,所以有初始值的變數之值要儲存在不會被改寫的快閃記憶體中,由啟動程式碼複製到RAM上該變數的位置。沒有初始值的變數區域(.bss)則以0填滿。在連結器腳本中,.data會分別指定「放在快閃記憶體的位址」與「執行時在RAM上使用的位址」。完成這些之後,才能以符合C語言約定的狀態開始執行main。

  • A. 不會進行寫回。
  • B. 一般RAM的內容在斷電後會消失。
  • C. 正確。這是為了遵守C語言的初始值約定而做的處理。
練習這個領域 前往領域頁面

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

  1. 關於ELF檔案中的「區段(section)」與「段(segment)」的差異,下列何者正確?
  2. 藉由不讓記憶體分頁同時具備「可寫入」與「可執行」(W^X,寫入與執行分離),較容易防禦的攻擊為下列何者?
  3. 在Linux的共用函式庫中,將libfoo.so.1的「.1」這類soname的版本號碼調高,一般是在什麼時候?
  4. 在Linux上對執行檔使用ldd指令,可得知下列何者?
  5. 主要作業系統所使用的執行檔格式組合,下列何者正確?

這個領域的比較