Debugging asan库因阴影内存范围与现有内存映射交叉而失败

Debugging asan库因阴影内存范围与现有内存映射交叉而失败,debugging,memory,compilation,Debugging,Memory,Compilation,加载lib asan时,它会失败,错误如下: 阴影内存范围与现有内存映射交错。ASan无法正确进行。流产 我使用LD_PRELOAD加载了这个库,然后启动这个过程,因为上面提到的错误它失败了 提前感谢。我发现了一个32位目标出现这种情况的原因,但在本文中没有提到。如果堆栈大小不受限制(即运行了ulimit-s unlimited),那么在进程映射的顶部会保留大量的地址空间,以供堆栈扩展。这意味着动态链接器、vdso、libasan.so和其他共享库的加载位置为0x2aab000及以下(对于x86

加载lib asan时,它会失败,错误如下: 阴影内存范围与现有内存映射交错。ASan无法正确进行。流产

我使用LD_PRELOAD加载了这个库,然后启动这个过程,因为上面提到的错误它失败了


提前感谢。

我发现了一个32位目标出现这种情况的原因,但在本文中没有提到。如果堆栈大小不受限制(即运行了
ulimit-s unlimited
),那么在进程映射的顶部会保留大量的地址空间,以供堆栈扩展。这意味着动态链接器、vdso、libasan.so和其他共享库的加载位置为0x2aab000及以下(对于x86上的我而言),这与ASAN希望使用的地址范围冲突


这并不常见,因为Linux上的默认软堆栈限制是8192,这在ASAN的共享库下面留下了大量的地址空间。修复方法是设置更合适的堆栈大小限制。

请检查:A1:如果您使用的是共享ASan DSO,请尝试将ASan运行时预加载到您的程序中。A2:否则,您可能会遇到已知的动态运行时限制。Libasan是在程序启动结束时初始化的,因此如果前面的库初始值设定项执行了大量内存分配,ASan阴影内存所需的内存区域可能会被不相关的映射占用。但我仍然面临问题我的意思是,在arch linux上,hello word程序也存在同样的问题最近,我再次使用相同的工具面临类似的问题,在我的例子中,使用了“不”派,当我运行了一个C++程序时,这个错误出现在 > FSAIITZE/<代码>和ValgND和 >漏洞检查=完整< /COD>。它们必须分开运行。