【发布时间】:2011-03-05 04:17:16
【问题描述】:
有人可以使用readelf解释符号表中显示的列吗?
【问题讨论】:
有人可以使用readelf解释符号表中显示的列吗?
【问题讨论】:
考虑以下几点:
符号表 .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 = 内存部分,Notype = 无类型绝对符号或未定义Bind = GLOBAL 绑定意味着符号在文件外可见。 LOCAL 绑定仅在文件中可见。 WEAK 就像全局一样,符号可以被覆盖。 Vis = 符号可以是默认的、受保护的、隐藏的或内部的。 Ndx = 符号所在的节号。ABS 表示绝对:未调整到任何节地址的重定位Name = 符号名称【讨论】:
_main 的末尾看到以下代码:.size _main, .-_main。该指令告诉 as 函数 _main 的大小是当前位置减去其起始地址。
我认为 Ndx 字段显示了定义该符号的部分编号。
执行readelf -a <file>,并找出地址对应于给定符号的哪个部分。
我敢打赌,该节的节号会出现在 Ndx 字段中。
【讨论】:
好的,这个问题很老了,但是如果您正在寻找 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 列作为变量是否已初始化的提示。但是我在任何地方都没有找到任何文档,所以我只是在猜测。
问候, 多米尼克
【讨论】:
您可以:
man readelf
或查看这些教程:
【讨论】: