【发布时间】:2015-08-04 21:33:53
【问题描述】:
我正在 x86/Linux 上测试一些 64 位 ELF 二进制文件。
我使用 gcc 编译了apache 服务器,使用它的默认配置(我猜是优化级别 O2)。
我使用strip 命令剥离了httpd 二进制文件,并使用此命令检查httpd ELF 二进制文件中的exported 变量。例如,对于变量ap_hack_ap_hook_get_open_
readelf -s httpd | grep ap_hack_ap_hook_get_open_
令我惊讶的是,我发现了变量ap_hack_ap_hook_get_open_ 的两个定义。如下图:
1732: 000000000068ff88 8 OBJECT GLOBAL DEFAULT 24 ap_hack_ap_hook_get_open_
2263: 000000000068ff10 8 OBJECT GLOBAL DEFAULT 24 ap_hack_ap_hook_get_open_
请注意,它们具有不同的内存地址,这意味着它们位于 ELF 二进制文件中的不同位置。
谁能解释一下为什么可以存在两个同名但地址不同的变量?
【问题讨论】:
-
他们可能有不同的范围。
-
@WeatherVane,你好,你能解释一下“不同的范围”吗?它们都具有“全局”属性。
-
这只是猜测,因为您没有提供任何声明或上下文。
标签: c binary reverse-engineering x86-64 elf