本文介绍了如何解释精灵符号表部分的st_info字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
手册页的意思是:
st_info This member specifies the symbol's type and binding
attributes:
STT_NOTYPE The symbol's type is not defined.
STT_OBJECT The symbol is associated with a data object.
STT_FUNC The symbol is associated with a function or other
executable code.
STT_SECTION The symbol is associated with a section. Symbol
table entries of this type exist primarily for
relocation and normally have STB_LOCAL bindings.
STT_FILE By convention, the symbol's name gives the name
of the source file associated with the object
file. A file symbol has STB_LOCAL bindings, its
section index is SHN_ABS, and it precedes the
other STB_LOCAL symbols of the file, if it is
present.
STT_LOPROC This value up to and including STT_HIPROC is
reserved for processor-specific semantics.
STT_HIPROC This value down to and including STT_LOPROC is
reserved for processor-specific semantics.
STB_LOCAL Local symbols are not visible outside the object
file containing their definition. Local symbols
of the same name may exist in multiple files
without interfering with each other.
STB_GLOBAL Global symbols are visible to all object files
being combined. One file's definition of a
global symbol will satisfy another file's
undefined reference to the same symbol.
STB_WEAK Weak symbols resemble global symbols, but their
definitions have lower precedence.
STB_LOPROC This value up to and including STB_HIPROC is
reserved for processor-specific semantics.
STB_HIPROC This value down to and including STB_LOPROC is
reserved for processor-specific semantics.
There are macros for packing and unpacking the
binding and type fields:
ELF32_ST_BIND(info) or ELF64_ST_BIND(info)
extract a binding from an st_info value.
ELF32_ST_TYPE(info) or ELF64_ST_TYPE(info)
extract a type from an st_info value.
ELF32_ST_INFO(bind, type) or ELF64_ST_INFO(bind,
type)
convert a binding and a type into an st_info
value.
问题是STT_*
和STB_*
的值重叠.这是uapi/linux/elf.h中这些值的声明:
The problem is that the values for STT_*
and STB_*
overlap. This is the declaration of those values in uapi/linux/elf.h:
#define STB_LOCAL 0
#define STB_GLOBAL 1
#define STB_WEAK 2
#define STT_NOTYPE 0
#define STT_OBJECT 1
#define STT_FUNC 2
#define STT_SECTION 3
#define STT_FILE 4
#define STT_COMMON 5
#define STT_TLS 6
我想我理解STB_*
的值是"Bindings",而STT+*
的是"Types",但是由于值重叠,给定了符号表,我如何知道如何解释该字段?
I think I understand that the STB_*
values are 'Bindings' and STT+*
are 'Types', but since the values overlap, given a symbol table, how can I tell how to interpret this field?
推荐答案
使用ELF{32,64}_ST_BIND
和ELF{32,64}_ST_TYPE
宏将st_info
拆分为其组件.
Use ELF{32,64}_ST_BIND
and ELF{32,64}_ST_TYPE
macros to split st_info
into its components.
查找/usr/include/elf.h
.您会找到类似的东西:
Look in /usr/include/elf.h
. You'll find something like:
/* How to extract and insert information held in the st_info field. */
#define ELF32_ST_BIND(val) ...
#define ELF32_ST_TYPE(val) ...
... etc.
这篇关于如何解释精灵符号表部分的st_info字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!