zoukankan      html  css  js  c++  java
  • Chap-3 Section 3.5 ELF符号表结构

    ELF文件中的符号表往往是文件中的一个段,段名叫".strtab"。符号表的结构是由Elf32_Sym
    结构体构成的数组,每个Elf32_Sym结构对应一个符号。数组的第一个元素,也就是下标
    为0的元素为无效的“未定义”符号。
    typedef struct {
    Elf32_Word st_name; //该符号名在字符串表中的下标。
    Elf32_Addr st_value; //符号相对应的值。
    Elf32_Word st_size; //符号大小。对于包含数据的符号,这个值是该数据类型的大小
    unsigned char st_info; //符号类型和绑定信息。
    unsigned char st_other; //该成员目前为0,没用。
    Elf32_Half st_shndx; //符号所在的段。
    }Elf32_Sym;

    符号类型和绑定信息(st_info)
    该成员低4位表示符号的类型(Symbol Type),高28位表示符号绑定信息(Symbol Binding)。
    符号绑定信息
    STB_LOCAL 0 局部符号,对于目标文件的外部不可见
    STB_GLOBAL 1 全局符号,外部可见
    STB_WEAK 2 弱符号
    符号类型信息
    STT_NOTYPE 0 未知类型符号
    STT_OBJECT 1 该符号是个数据对象,比如变量、数组等
    STT_FUNC 2 该符号是个函数或者其他可执行代码
    STT_SECTION 3 该符号表示一个段,这种符号必须是STB_LOCAL的
    STT_FILE 4 该符号表示文件名,一般都是该目标文件所对应的源文件名,
    它一定是STB_LOCAL类型的。

    符号所在的段(st_shndx)
    如果符号定义在本目标文件中,那么这个成员表示符号所在段在段表中的下标。如果符号
    不是定义在本目标文件中,或者对于有些特殊符号,又如下所示的一些值:
    符号所在段特殊常量
    SHN_ABS 0xfff1 该符号包含了一个绝对值,比如表示文件名的符号。
    SHN_COMMON 0xfff2 表示该符号是一个"COMMON块"的符号
    SHN_UNDEF 0 该符号在本目标文件中被引用到,但是定义在其他目标文件中。

    符号值(st_value)
    如果这个符号是函数或者变量的定义,那么符号的值就是这个函数或者变量的地址,分为
    一下几种情况:
    1.在目标文件中,如果是符号的定义并且该符号不是"COMMON块"类型的,则st_value表示
    该符号在段中的偏移,即符号所对应的函数或者变量位于由sh_shndx指定的段,偏移st_value
    的位置,这也是目标文件中定义全局变量最长见的情况。
    2.在目标文件中,如果符号是"COMMON块"类型的,则st_value表示该符号的对其属性。
    3.在可执行文件中,st_value表示符号的虚拟地址。

  • 相关阅读:
    弹出框位置设置
    Spring Boot 发布 jar 包转为 war 包秘籍
    Oracle 动态sql小例子
    [转]ORACLE EXECUTE IMMEDIATE 小结
    [转]Java web 开发 获取用户ip
    SQLServer2008 使用sql语句访问excel数据
    Oracle 循环调用存储过程
    JavaScript 判断手机端操作系统(Andorid/IOS)
    Oracle 当输入参数允许为空时
    Oracle 生成数据字典
  • 原文地址:https://www.cnblogs.com/miaoyong/p/3502869.html
Copyright © 2011-2022 走看看