【问题标题】:Possible to disable asan using an environment variable?可以使用环境变量禁用 asan 吗?
【发布时间】:2017-07-24 06:15:02
【问题描述】:

目前我在使用 asan (See report) 时遇到了一个已知问题

==5097==Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING.
==5097==ASan shadow was supposed to be located in the [0x00007fff7000-0x10007fff7fff] range.

是否可以使用环境变量来停止使用 asan 来防止此错误?

或者至少阻止这个错误是致命的。


我想这样做的原因是在生成代码时发生了失败的命令,但我想将 asan 用于生成的二进制文件。为生成的二进制文件和最终的二进制文件设置不同的 CFLAGS 是可能的,但如果不对其他人进行硬编码,就很难做到。所以我想要一种在构建步骤中禁用 asan 的方法,但之后再使用。


编辑:如果它有用,可以通过一个非常简单的程序来实现:ErrorCode

【问题讨论】:

  • 你有没有试过检查哪个库占用了 Asan 所需的这个内存区域?
  • 这个错误的奇怪之处在于可执行文件被映射到 0x00ab8a216000 而不是usual 0x400000。您链接 datatoc 的方式有什么特别之处吗?也许特别LDFLAGS
  • 除了使用 ASAN 之外,LDFLAGS 没什么奇怪的。
  • 您的可执行文件在非标准地址加载一定是有原因的。也许它是一个 PIE?
  • 此错误报告可能比您的问题中链接的报告更相关:github.com/google/sanitizers/issues/837 如果this report 是正确的,则将您的内核降级到

标签: address-sanitizer


【解决方案1】:

不,这是一个基本错误,它会阻止 Asan 以后的所有仪器正常工作。例如。函数序言中的堆栈中毒最终会导致段错误或破坏随机内存。

【讨论】:

    【解决方案2】:

    您报告的错误不是地址清理程序发现的寻址错误,而是地址清理程序本身的问题。阅读常见问题解答here。在此处报告与您的案例相关的部分:

    问:我正在使用动态 ASan 运行时,我的程序在开始时崩溃 “影子内存范围与现有内存映射交错。ASan 无法正确进行。”。

    A1:如果您使用共享 ASan DSO,请尝试使用 LD_PRELOAD'ing Asan 运行时 进入你的程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 2012-03-30
      • 2015-09-04
      相关资源
      最近更新 更多