readelf显示的符号表列的含义是什么?

时间:2010-06-17 20:50:36

标签: symbols elf

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

4 个答案:

答案 0 :(得分:43)

请考虑以下事项:

符号表.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 =内存部分,{{1} } =无类型绝对符号或未定义
  • Notype = Bind绑定表示该符号在文件外部可见。 GLOBAL绑定仅在文件中可见。 LOCAL就像全球一样,符号可以被覆盖。
  • WEAK =符号可以是默认,受保护,隐藏或内部。
  • Vis =符号所在的区号.ABS表示绝对值:未调整为任何区段地址的重定位
  • Ndx =符号名称

答案 1 :(得分:2)

你可以:

man readelf

或者查看这些教程:

答案 2 :(得分:0)

我认为Ndx字段显示定义该符号的节号。

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

我敢打赌,该部分的部分编号将显示在Ndx字段中。

答案 3 :(得分:-1)

好的,这个问题已经很久了,但是如果你正在寻找readelf symboltable和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列作为提示。但是我发现没有任何文档,所以我只是在猜测。

问候, 多米尼克