使用objdump反汇编的冲突函数名

逆向工程 拆卸 转储 重新组装
2021-06-10 10:14:55

所以基本上当我使用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

当我反汇编prusing 时objdump,我确实看到了 functionbkm_scale和 的两个定义bkm_scale_by_power,并且它们反汇编的 asm 代码是不同的。

那么它是否表明存在一些反汇编错误?如果不是,那为什么会有两个FUNC同名的符号呢?

1个回答

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

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

我在 readelf -s 的输出或系统安装的 'pr' 上的 objdump 中没有看到这些函数。我想你已经自己编译了 coreutils 吗?

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

继续探索!保持学习!