【问题标题】:What are the meanings of the columns of the symbol table displayed by readelf?readelf显示的符号表各列的含义是什么?
【发布时间】:2011-03-05 04:17:16
【问题描述】:

有人可以使用readelf解释符号表中显示的列吗?

【问题讨论】:

    标签: symbols elf


    【解决方案1】:

    考虑以下几点:

    符号表 .symtab 包含 1203 个条目:

     Num:    Value  Size Type    Bind   Vis      Ndx Name
     310: a0008120     0 NOTYPE  GLOBAL DEFAULT  ABS _gp  
     734: a0000010    32 OBJECT  GLOBAL DEFAULT   77 v 
     818: 9d000018   496 FUNC    GLOBAL DEFAULT   71 main 
     849: a0000124     4 OBJECT  GLOBAL DEFAULT   78 phrase 
     955: a0000000     9 OBJECT  GLOBAL DEFAULT   77 peppers  
    1020: a000023c   192 OBJECT  GLOBAL DEFAULT   80 bins
    
    • Num: = 符号编号
    • Value = 符号地址
    • Size = 符号的大小
    • Type = 符号类型:Func = 函数,ObjectFile(源文件名),Section = 内存部分,Notype = 无类型绝对符号或未定义
    • Bind = GLOBAL 绑定意味着符号在文件外可见。 LOCAL 绑定仅在文件中可见。 WEAK 就像全局一样,符号可以被覆盖。
    • Vis = 符号可以是默认的、受保护的、隐藏的或内部的。
    • Ndx = 符号所在的节号。ABS 表示绝对:未调整到任何节地址的重定位
    • Name = 符号名称

    【讨论】:

    • 作为绑定值的“UNIQUE”是什么意思??
    • @Caladin “符号的大小”是什么意思?比如说,如果符号是函数名,那么“Size”表示函数的大小(例如,这个函数有多少条指令)?
    • 不是多少指令,而是多少字节(通常,可能因目标而异)。例如,在 gcc 的一些 asm 输出中,我在函数 _main 的末尾看到以下代码:.size _main, .-_main。该指令告诉 as 函数 _main 的大小是当前位置减去其起始地址。
    【解决方案2】:

    我认为 Ndx 字段显示了定义该符号的部分编号。

    执行readelf -a <file>,并找出地址对应于给定符号的哪个部分。

    我敢打赌,该节的节号会出现在 Ndx 字段中。

    【讨论】:

      【解决方案3】:

      好的,这个问题很老了,但是如果您正在寻找 readelf 符号表和 NDX,那么老 Google 会提供它;

      这是我发现的:

      用avr-gcc编译的C代码:

      int XYZ = 123;
      int ABC;
      

      当使用分析生成的elf文件时

      readelf --symbols KoreOS.elf
      

      你得到输出:

      Num:    Value  Size Type    Bind   Vis      Ndx Name
      ...
      148: 0080200b     2 OBJECT  GLOBAL DEFAULT    2 XYZ
      ...
      258: 00803878     2 OBJECT  GLOBAL DEFAULT    3 ABC
      ...
      

      我使用 NDX 列作为变量是否已初始化的提示。但是我在任何地方都没有找到任何文档,所以我只是在猜测。

      问候, 多米尼克

      【讨论】:

        【解决方案4】:

        【讨论】:

        • 我也对这个问题的答案感兴趣。特别是,什么是 Ndx(来自 readelf -s)?对于了解精灵的人来说,这可能是显而易见的。我查看了手册页和您列出的文档,但在那里找不到信息。也许我只是错过了它?这不会是第一次。
        • 最重要的是:阅读 LSB 指向的标准:sco.com/developers/gabi/2003-12-17/contents.html 是最有趣的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-11
        • 2012-10-15
        • 1970-01-01
        • 2011-08-15
        相关资源
        最近更新 更多