C/C++开发工具CLion动态代码分析教程(二):AddressSanitizer

本文主要介绍在 CLion中进行动态代码分析时AddressSanitizer相关内容 。

本文主要介绍在 CLion中进行动态代码分析时AddressSanitizer相关内容 。

AddressSanitizer

AddressSanitizer (ASan)是一种内存损坏检测器,能够发现以下类型的错误:

  • 堆、堆栈和全局缓冲区溢出。
  • 释放后使用(悬空指针取消引用)。
  • 作用域后使用-fsanitize-address-use-after-scope。
  • 返回后使用(传递detect_stack_use_after_return=1给ASAN_OPTIONS)。
  • 双倍免费,无效免费。
  • 初始化顺序错误。

ASan 详细信息:FAQ、标志列表、如何将 ASan 与 GDB 一起使用、关闭 ASan 检测、ASan 算法、Clang 中的 ASan。

例如,考虑以下代码片段:

int global_array[100] = {-1};int main(int argc, char **argv) {    return global_array[argc + 100];  // global buffer overflow}

当使用标志构建时,由于AddressSanitizer 检测到全局缓冲区溢出-fsanitize=address -fno-omit-frame-pointer -O1,该程序将以非零代码退出:

跨平台C/C++开发软件CLion使用教程。

请注意,ASan 在第一个检测到的错误时停止。要更改此行为并使 ASan 在报告第一个错误后继续运行,请添加到-fsanitize-recover=address编译器标志和.halt_on_error=falseASAN_OPTIONS。

在 Windows 上配置 AddressSanitizer

在 Windows 上,您可以使用clang-cl编译器在MSVC 工具链下使用 AddressSanitizer。

  1. 运行Visual Studio 安装程序并确保安装C++ AddressSanitizer组件。您可以在使用 C++ 的桌面开发节点下找到它:
  2. 跨平台C/C++开发软件CLion使用教程。
  3. 在 CLion 中,转到设置/首选项 | 构建、执行、部署 | 工具链并创建新的Visual Studio工具链或编辑现有工具链。
  • 将架构设置为x86_amd64。
  • 在C Compiler和C++ Compiler字段中设置clang-cl的路径。
    您可以使用LLVM 发行版或 Visual Studio 工具中的clang-cl 。在后一种情况下,路径将是例如C: Program Files(x86) Microsoft Visual Studio 2019 Community VC Tools Llvm bin clang-cl.exe。
  • 跨平台C/C++开发软件CLion使用教程。
  • 在您的CMakeLists.txt中,在命令后添加以下行add_executable(替换exec为您的可执行文件的名称):
    target_compile_options(exec PRIVATE -fsanitize=address)target_link_directories(exec PRIVATE "$ENV{ProgramFiles(x86)}/Microsoft Visual Studio/2019/Professional/VC/Tools/Llvm/x64/lib/clang/10.0.0/lib/windows")target_link_libraries(exec PRIVATE clang_rt.asan_dynamic-x86_64 clang_rt.asan_dynamic_runtime_thunk-x86_64)target_link_options(exec PRIVATE /wholearchive:clang_rt.asan_dynamic_runtime_thunk-x86_64.lib)
  • 如果需要,调整ProgramFiles (x86 )} /Microsoft Visual Studio /2019 /Professional /VC /Tools /Llvm /x64 /lib /clang /10.0.0 /lib /windows路径。此目录包含 AddressSanitizer 所需的库。

  • 转到设置/首选项 | 构建、执行、部署 | CMake,创建一个Release profile,并将其设置为默认值(将其移动到配置文件列表的顶部):
  • 跨平台C/C++开发软件CLion使用教程。
  • 尝试加载并构建项目。如果出现链接器错误,请将ProgramFiles (x86 )} /Microsoft Visual Studio /2019 /Professional /VC /Tools /Llvm /x64 /lib /clang /10.0.0 /lib /windows中的所有文件复制到cmake-构建发布文件夹。
  • 以上就是在 CLion中关于AddressSanitizer相关教程内容,更多关于CLion使用教程的内容可进入官网查看。

    CLion| 下载试用

    CLion是一款专为开发C及C++所设计的跨平台IDE。它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员的生产力。

    CLion技术交流

    标签:

    来源:慧都

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年5月19日
    下一篇 2022年5月19日

    相关推荐

    发表回复

    登录后才能评论