因此,基本上,当我使用objdumpreadelf拆卸某些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_scalebkm_scale_by_power的两个定义,并且它们的反汇编asm代码不同。

那么这表明一些反汇编错误吗?如果不是,那么为什么两个FUNC符号具有相同的名称?

#1 楼

看起来像是本地定义,可能在两个地方定义,以允许使用略有不同的版本。它们不是全局函数,只能被限制只出现(或定义一次)。

可能是静态地在多个文件中定义的,因此它们仅用于(或限定于)特定文件。

在系统的已安装'pr'上的readelf -s或objdump的输出中看不到这些功能。我想您是自己编译coreutils的?

由于您正在使用'pr'的源代码,因此可以为bkm_scale和bkm_scale_by_power进行grep查看它们的使用和定义位置。

继续探索!继续学习!