2014-10-04 84 views
4

我目前很難理解鏈接/加載的概念。我對使用符號表和重定位表的理解是否正確?

您能否告訴我下列關於使用符號和重定位表的語句是否正確?

  1. 在可重定位目標文件中,符號表必須包含從其他目標文件訪問/調用的變量和函數的條目。不在目標文件外使用的變量和函數列表是可選的。
    • 這意味着如果程序只包含一個目標文件,則符號表可以省略。
  2. 在可重定位的目標文件中,重定位表包含裝載過程中必須更新的彙編代碼所有位置的地址。
  3. 在不可重定位的目標文件中,可以省略重定位表。然而,對象必須被加載到硬編碼到指令中的地址空間中。

謝謝你的時間!

回答

4
  1. 第一部分(大約只需要extern元素)是正確的。然而,關於由單個目標文件組成的程序的推論並不完全正確:至少有一個符號必須可供外部使用 - 即入口點(C程序的main函數)必須可見。
  2. 由於address這裏在不同的背景下意味着不同的事物,所以最好在文件內部討論偏移量,而不是地址。重定位表保存了文件加載到內存時需要更新的所有內容以及需要寫入這些偏移量的信息。
  3. 不可重定位文件需要在特定地址加載。沒有重新安置表是必要的。
相關問題