上篇笔记中说过,Elf32_Sym 结构的 st_info 成员包含了符号的类型和绑定属性等信息。 在android linker 做重定位时,如果遇到未定义的符号,会判断该符号是否是一个弱引用符号,如果不是,则出错返回。具体是通过 ELF32_ST_BIND 宏来判断的: ELF32_ST_BIND 宏就是从 st_info 中提取一些 bit
--st_info:符号类型和绑定信息,如下详细介绍; --st_other:保留字段,未使用,默认为 0 --st_shndx:符号所在节,节索引,下面详细介绍 --st_value:符号所对应的值,这个值和符号有关,可能是一个绝对值,也可能是一个地址等,不同的符号,他所对应的值含义不同 --st_size:符号大小,对于包含数据的符号,这个值是...
}Elf32_Sym st_name符号名,符号名称在字符串表中的索引 st_value符号相应的值,可能是地址或一个绝对值数 st_size符号大小 st_info符号类型和绑定值 st_other默认0 st_shndx符号所在的段 st_info 高4位表示符号绑定信息,低4位表示符号类型。 Symbol Binding, ELF32_ST_BIND Symbol Types, ELF32_ST_TYPE ...
Elf64_Word st_name; /* Symbol name, index in string tbl */ unsigned char st_info; /* Type and binding attributes */ unsigned char st_other; /* No defined meaning, 0 */ Elf64_Half st_shndx; /* Associated section index */ Elf64_Addr st_value; /* Value of the symbol */ Elf6...
Elf32_Word st_size;// Size unsignedcharst_info;// unsignedcharst_other; Elf32_Half st_shndx;// Ndx } Elf32_Sym; st_name:该成员将对象文件(Object File)的符号字符串表中的索引保存在符号名称的字符表示中 st_value:该成员给出相关联的符号的值。 根据上下文,这可能是绝对值,地址等等; 不同对象...
符号类型和绑定信息(st_info)该成员的低4位标识符号的类型(Symbol Type),高28位标识符号绑定信息(Symbol Binding),如下表所示。 符号所在段(st_shndx)如果符号定义在本目标文件中,那么这个成员表示符号所在段在段表中的下表,但是如果符号不是定义在本目标文件中,或者对于有些特殊符号,sh_shndx的值有些特殊。如...
Elf_Byte st_other; /* unused */ Elf64_Quarter st_shndx; /* section index of symbol */ Elf64_Xword st_value; /* value of symbol */ Elf64_Xword st_size; /* size of symbol */ } Elf64_Sym; 其中各个字段的含义说明: st_info 说明 ...
ELF32_ST_BIND(info)或者 ELF64_ST_BIND(info):从 st_info 值中提取出一个绑定。 ELF32_ST_TYPE(info)或者 ELF64_ST_TYPE(info):从 st_info 值中提取类型。 ELF32_ST_TYPE(bind,type)或者ELF64_ST_INFO(bind,type): 将一个绑定和类型转换成st_info值。 4. -l 指令 program头信息。 程序头表与...
Elf32_Word st_name; Elf32_Addr st_value; Elf32_Word st_size; Unsigned char st_info; Unsigned char st_other; Elf32_Half st_shndx; }Elf32_Sym; 其中st_name包含指向符号表字符串表(strtab)中的索引,从而可以获得符号名。St_value指出符号的值,可能是一个绝对值、地址等。St_size指出符号相关的...
Elf32_Addr st_value; // Value or address associated with the symbol Elf32_Word st_size; // Size of the symbol unsigned char st_info; // Symbol's type and binding attributes unsigned char st_other; // Must be zero; reserved