这听起来像是很远的事…但是您可以尝试以下方法吗?
$ readelf -a fail
并寻找GNU_HASH动态标签?我的猜测是二进制文件使用
GNU_HASH,而您
ld.so太旧了,无法理解。对GNU哈希部分的支持是在2006年左右添加到glibc的,并且主线发行版在2007年或2008年左右才成为仅GNU哈希的发行版。您的Centrino发行
glibc于
2003年 ,它早于GNU哈希。
如果
ld.so不能理解GNU哈希,它将尝试改用旧的ELF哈希部分,该部分为空。特别是,我怀疑您的崩溃发生在此行中
elf/do-lookup.h:
for (symidx = map->l_buckets[hash % map->l_nbuckets];
由于链接器可能无法理解GNU哈希,因此
l_nbuckets将其设置为0,从而导致崩溃。请注意,这
map是一个具有约100个结构元素的大型结构,并且
l_nbuckets在较新的结构中
ld.so(
0x164= 4*89,在较旧的结构中,该结构
ld.so可能恰好是该成员)位于结构的第90个成员附近。
要查看这是否 最终 是问题,请使用
-Wl,--hash-style=sysv或进行构建,
-Wl,--hash-style=both并查看崩溃是否消失。



