上篇笔记中说过,Elf32_Sym 结构的 st_info 成员包含了符号的类型和绑定属性等信息。 在android linker 做重定位时,如果遇到未定义的符号,会判断该符号是否是一个弱引用符号,如果不是,则出错返回。具体是通过 ELF32_ST_BIND 宏来判断的: ELF32_ST_BIND 宏就是从 st_info 中提取一些 bits 作为绑定属性: 符号...
st_value,第5-8个字节,根据具体情况取得含义,例如符号表示函数时,该值为函数在内存中的起始地址,若该符号表示全局或静态变量时,表示内存在变量中的位置。 符号值值大小: st_size,第9-12个字节,变量长度或者函数代码所占字节数 符号类型: st_info,第13个字节,根据1个字节的八位比特作为flag标注符号的特征,高4...
st_info 中包含符号类型和绑定信息,操纵方式如: include/uapi/linux/elf.h #define ELF_ST_BIND(x) ((x) >> 4) #define ELF_ST_TYPE(x) (((unsigned int) x) & 0xf) #define ELF32_ST_BIND(x) ELF_ST_BIND(x) #define ELF32_ST_TYPE(x) ELF_ST_TYPE(x) #define ELF64_ST_BIND(x) ...
--st_info:符号类型和绑定信息,如下详细介绍; --st_other:保留字段,未使用,默认为 0 --st_shndx:符号所在节,节索引,下面详细介绍 --st_value:符号所对应的值,这个值和符号有关,可能是一个绝对值,也可能是一个地址等,不同的符号,他所对应的值含义不同 --st_size:符号大小,对于包含数据的符号,这个值是...
符号类型和绑定信息(st_info)该成员的低4位标识符号的类型(Symbol Type),高28位标识符号绑定信息(Symbol Binding),如下表所示。 符号所在段(st_shndx)如果符号定义在本目标文件中,那么这个成员表示符号所在段在段表中的下表,但是如果符号不是定义在本目标文件中,或者对于有些特殊符号,sh_shndx的值有些特殊。如...
Elf32_Wordst_size;//Size unsignedcharst_info;// unsignedcharst_other; Elf32_Halfst_shndx;//Ndx }Elf32_Sym; 12345678 st_name:该成员将对象文件(Object File)的符号字符串表中的索引保存在符号名称的字符表示中 st_value:该成员给出相关联的符号的值。 根据上下文,这可能是绝对值,地址等等; 不同对...
Elf32_Word st_size;// Size unsignedcharst_info;// unsignedcharst_other; Elf32_Half st_shndx;// Ndx } Elf32_Sym; st_name:该成员将对象文件(Object File)的符号字符串表中的索引保存在符号名称的字符表示中 st_value:该成员给出相关联的符号的值。 根据上下文,这可能是绝对值,地址等等; 不同对象...
* 在可执行和共享对象文件中,st_value包含了逻辑地址,为了使得这些文件的符号更利于动态连接器使用,对应section的offset给定的是内存逻辑地址; 3. st_size 许多符号都有尺寸,例如,一个数据对象的尺寸就是该对象中包含的字节数。如果符号没有大小或者大小未知,则该值为0; 4. st_info 该成员指定了符号的类型和...
Elf32_Word st_name; /* Symbol name (string tbl index) */ Elf32_Addr st_value; /* Symbol value */ Elf32_Word st_size; /* Symbol size */ unsigned char st_info; /* Symbol type and binding */ unsigned char st_other; /* Symbol visibility */ ...
Elf32_Addr st_value; Elf32_Word st_size; unsigned char st_info; unsigned char st_other; Elf32_Section st_shndx; } Elf32_Sym; typedef struct { Elf64_Word st_name; unsigned char st_info; unsigned char st_other; Elf64_Section st_shndx; Elf64_Addr st_value; Elf64_Xword st_size...