当您加载lib asan时,它会因以下错误而失败: 影子存储器范围与现有存储器映射交错。 ASan无法正确进行。 ABORTING。
我使用LD_PRELOAD加载库,然后启动它失败的过程,如上所述错误。
提前致谢。
答案 0 :(得分:0)
我找到了AddressSanitizer FAQ中未提及的32位目标的原因。如果堆栈大小不受限制(例如,您已经运行ulimit -s unlimited
),则在进程映射的顶部会保留大量地址空间,以便堆栈可以增长。这意味着动态链接程序vdso,libasan.so和其他共享库的加载位置在0x2aaab000及以下(对于我在x86上),与ASAN希望使用的地址范围冲突。
由于Linux的默认软堆栈限制为8192,因此很少见到,这在ASAN的共享库下方留有足够的地址空间。解决方法是设置更合适的堆栈大小限制。