readelf显示的符号表各列的含义是啥?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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】:

您可以:

man readelf

或查看这些教程:

The ELF Object File Format by Dissection Understanding ELF using readelf and objdump.

【讨论】:

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

以上是关于readelf显示的符号表各列的含义是啥?的主要内容,如果未能解决你的问题,请参考以下文章

ELF格式文件符号表全解析及readelf命令使用方法

readelf用法小记

符号表中的值是啥?

mysql中 show index from tb_name命令各列的含义

数学那个带有∑这个符号的求和公式是啥含义,∑符号各部分表示的意思是啥?

SQL # 符号是啥意思,它是如何使用的?