57

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

4

4 回答 4

64

考虑以下:

符号表.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= 符号名称
于 2010-06-17T21:10:21.467 回答
1

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

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

我打赌该部分的部分编号将出现在 Ndx 字段中。

于 2012-07-19T16:09:08.843 回答
1

您可以:

man readelf

或查看这些教程:

于 2010-06-17T20:56:14.533 回答
-2

好的,这个问题很老,但是如果您正在寻找 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 列作为提示。但是我在任何地方都没有找到任何文档,所以我只是在猜测。

问候,多米尼克

于 2011-06-08T13:36:36.763 回答