有人可以使用readelf
解释符号表中显示的列吗?
答案 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
=功能,Object
,File
(源文件名),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列作为提示。但是我发现没有任何文档,所以我只是在猜测。
问候, 多米尼克