asan库失败,影子内存范围交错与现有内存映射

时间:2017-02-10 05:13:54

标签: debugging memory compilation

当您加载lib asan时,它会因以下错误而失败: 影子存储器范围与现有存储器映射交错。 ASan无法正确进行。 ABORTING。

我使用LD_PRELOAD加载库,然后启动它失败的过程,如上所述错误。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我找到了AddressSanitizer FAQ中未提及的32位目标的原因。如果堆栈大小不受限制(例如,您已经运行ulimit -s unlimited),则在进程映射的顶部会保留大量地址空间,以便堆栈可以增长。这意味着动态链接程序vdso,libasan.so和其他共享库的加载位置在0x2aaab000及以下(对于我在x86上),与ASAN希望使用的地址范围冲突。

由于Linux的默认软堆栈限制为8192,因此很少见到,这在ASAN的共享库下方留有足够的地址空间。解决方法是设置更合适的堆栈大小限制。