1

我希望在我的共享库上使用 Clang 的泄漏/地址清理程序,该库是dotnet在运行时从 JVM 或(Linux)加载的,所以我无法重新编译二进制文件。

使用LD_PRELOAD会产生非常嘈杂的输出,JVM 本身会报告很多(可能是误报?)泄漏。当LD_PRELOADing for时,消毒剂彻底崩溃dotnet

有没有办法将消毒剂静态链接到共享库(或动态链接LD_PRELOAD)?

4

1 回答 1

3

首先,您不能将 sanitizer 运行时库静态链接到您的库中。它必须被预加载以拦截 std 分配器(malloc等),否则会发生故障(在 Asan 启动时有一个特殊检查,以确保libasan已预加载)。

JVM 中的嘈杂输出很可能是合法错误。使用LD_PRELOAD会产生非常嘈杂的输出,JVM 本身会报告很多(可能是误报?)泄漏。

LD_PRELOAD用于 dotnet时,消毒剂彻底崩溃。

这是真正的崩溃还是诊断出的内存错误?崩溃可以在Asan 跟踪器中报告。内存错误应该报告给 dotnet 项目,但您仍然可以使用 continue-after-error 模式继续执行(grep for "continue-after-error" in Asan FAQ)。

于 2019-10-23T08:18:38.227 回答