以下部分索引保留並且參照這些部分符號不具有任何截面 -
#define SHN_UNDEF 0x00
#define SHN_LORESERVE 0xFF00
#define SHN_LOPROC 0xFF00
#define SHN_HIPROC 0xFF1F
#define SHN_ABS 0xFFF1
#define SHN_COMMON 0xFFF2
#define SHN_HIRESERVE 0xFFFF
根據該ELF格式規範,
SHN_UNDEF是一個值標記爲未定義的,不相關的或其他無意義的部分參考。相對於部分定義的符號是未定義的符號。
SHN_LORESERVE value指定保留索引範圍的下限。
SHN_LOPROC到SHN_HIPROC範圍用於處理器特定的語義。您應該查看您的平臺的ABI以獲取有關這些部分索引的信息。
SHN_ABS value指定相應參考的絕對值。這意味着如果符號引用此部分,則其已具有絕對值並且不受重定位的影響。
SHN_COMMON是未分配外部C變量的符號引用。
SHN_HIRESERVE value指定保留索引範圍的上限。
請注意,節標題表包含這些節的條目,但從SHN_LOPROC到SHN_HIPROC的包含範圍除外。
其他具體說明:
對於重定位文件,與部分指數SHN_COMMON符號的值指定對齊約束,而不是地址。這可能是指,被聲明爲全局變量.BSS變量 -
int arrayofIntegersToDisplay[256];// Declared a COMMON symbol
對於具有STT_FILE類型符號(持有其代碼被編譯的文件的名稱的字符串值),他們的section-index總是SHN_ABS。這意味着這種類型的符號當然應該被宣佈。
未定義符號(如前所述部折射率SHN_UNDEF)當在另一個文件分配一個目標文件的引用數據使用 -
一個例子是類似的東西,
/// @file Main.cpp
///
/// Here, we are declaring the variable "var". It is a STT_DATA
/// symbol which (should) have the section-index for ".data"
int var;
在另一個文件中,
/// @file Referer.cpp
///
/// Here, we are referencing the variable "var" allocated in the
/// object file for Main.cpp. It is an undefined symbol.
extern int var;
不知道你在說什麼處理器,以及哪個處理器專用的部分,這很難說。 – ajax
感謝您的回覆(最後; D)!是否可以對我的問題給出一個普遍的答案?那麼,如果有任何代碼結構總是會導致這樣的符號? –