objdump
和readelf
拆卸某些GNU Coreutils时,我发现了一种非常奇怪的情况:readelf -s pr | grep bkm_scale
....
176: 08050620 118 FUNC LOCAL DEFAULT 13 bkm_scale
177: 080506a0 39 FUNC LOCAL DEFAULT 13 bkm_scale_by_power
181: 08050a60 173 FUNC LOCAL DEFAULT 13 bkm_scale
182: 08050b10 50 FUNC LOCAL DEFAULT 13 bkm_scale_by_power
,当我使用
pr
拆卸objdump
时,我确实看到函数bkm_scale
和bkm_scale_by_power
的两个定义,并且它们的反汇编asm代码不同。那么这表明一些反汇编错误吗?如果不是,那么为什么两个
FUNC
符号具有相同的名称?#1 楼
看起来像是本地定义,可能在两个地方定义,以允许使用略有不同的版本。它们不是全局函数,只能被限制只出现(或定义一次)。可能是静态地在多个文件中定义的,因此它们仅用于(或限定于)特定文件。
在系统的已安装'pr'上的readelf -s或objdump的输出中看不到这些功能。我想您是自己编译coreutils的?
由于您正在使用'pr'的源代码,因此可以为bkm_scale和bkm_scale_by_power进行grep查看它们的使用和定义位置。
继续探索!继续学习!