以下部分索引保留并且参照这些部分符号不具有任何截面 -
#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)!是否可以对我的问题给出一个普遍的答案?那么,如果有任何代码结构总是会导致这样的符号? –