首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AddressSanitizer:_dl_get_tls_static_info中的SEGV

AddressSanitizer:_dl_get_tls_static_info中的SEGV
EN

Stack Overflow用户
提问于 2018-03-18 20:25:00
回答 1查看 4.4K关注 0票数 6

我试图让ASAN使用一个程序,但是我所做的任何事情都导致了ASAN:DEADLYSIGNAL,所以我试图缩小它的范围,测试一个只有几个编译器选项的小型测试程序,看看它是否能工作:

代码语言:javascript
复制
$ cat > test.c <<EOF
int main(void) { return 0; }
EOF

下面是命令行:

代码语言:javascript
复制
$ gcc -g -O0 -fno-omit-frame-pointer -fsanitize=address test.c && ./a.out
ASAN:DEADLYSIGNAL
=================================================================
==5711==ERROR: AddressSanitizer: SEGV on unknown address 0xb7f11e70 (pc 0xb7f11e84 bp 0xb7ab6320 sp 0xbf92368c T16777215)
==5711==The signal is caused by a WRITE memory access.
    #0 0xb7f11e83 in _dl_get_tls_static_info (/lib/ld-linux.so.2+0x11e83)
    #1 0xb7a24ff9  (/usr/lib/i386-linux-gnu/libasan.so.4+0x101ff9)
    #2 0xb7a10f15  (/usr/lib/i386-linux-gnu/libasan.so.4+0xedf15)
    #3 0xb7f0f91a  (/lib/ld-linux.so.2+0xf91a)
    #4 0xb7f00cb9  (/lib/ld-linux.so.2+0xcb9)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (/lib/ld-linux.so.2+0x11e83) in _dl_get_tls_static_info
==5711==ABORTING

(我对“真正”程序的错误也是如此。)

使用-static-libasan,堆栈跟踪更具有描述性:

代码语言:javascript
复制
$ gcc -g -O0 -fno-omit-frame-pointer -fsanitize=address -static-libasan test.c && ./a.out
ASAN:DEADLYSIGNAL
=================================================================
==5719==ERROR: AddressSanitizer: SEGV on unknown address 0xb7fc6e70 (pc 0xb7fc6e84 bp 0x005f91a0 sp 0xbfe77c2c T16777215)
==5719==The signal is caused by a WRITE memory access.
    #0 0xb7fc6e83 in _dl_get_tls_static_info (/lib/ld-linux.so.2+0x11e83)
    #1 0x560a49 in __sanitizer::InitTlsSize() (/home/gkirilov/test/a.out+0xe9a49)
    #2 0x552e05 in __asan::AsanInitInternal() (/home/gkirilov/test/a.out+0xdbe05)
    #3 0xb7fc491a  (/lib/ld-linux.so.2+0xf91a)
    #4 0xb7fb5cb9  (/lib/ld-linux.so.2+0xcb9)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (/lib/ld-linux.so.2+0x11e83) in _dl_get_tls_static_info
==5719==ABORTING

以下是有关该系统的一些详细信息:

代码语言:javascript
复制
$ uname -a
Linux drinkpad 4.14.0-3-686-pae #1 SMP Debian 4.14.17-1 (2018-02-14) i686 GNU/Linux

$ gcc --version
gcc (Debian 7.3.0-11) 7.3.0

$ /lib/i386-linux-gnu/libc-2.27.so
Compiled by GNU CC version 7.3.0.
libc ABIs: UNIQUE IFUNC

我还尝试了clang-6gcc-8 (它带来了ASAN v5 ),再次使用静态和共享的libasan,我得到了相同的消息。

我的平台不支持吗?但之后,我从正式的Debian存储库安装了所有工具。

ASAN的主页上写着它只在64位Ubuntu上进行了测试。,但我认为它已经过时了,因为它上面的表格同时列出了Linux x86和x86_64。

我是否做错了什么,还是我的平台没有支持?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-18 23:41:54

您正面临一个已知的Asan虫 (这里是Glibc螺纹GCC虫)。TLDR是在Glibc 2.25+上失败的,因为Glibc改变了Asan所依赖的一些内部接口。遗憾的是,这个bug还没有得到足够的关注。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49352485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档