本文主要介绍在 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,该程序将以非零代码退出:
请注意,ASan 在第一个检测到的错误时停止。要更改此行为并使 ASan 在报告第一个错误后继续运行,请添加到-fsanitize-recover=address编译器标志和.halt_on_error=falseASAN_OPTIONS。
在 Windows 上配置 AddressSanitizer
在 Windows 上,您可以使用clang-cl编译器在MSVC 工具链下使用 AddressSanitizer。
- 运行Visual Studio 安装程序并确保安装C++ AddressSanitizer组件。您可以在使用 C++ 的桌面开发节点下找到它:
- 在 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。
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 所需的库。
以上就是在 CLion中关于AddressSanitizer相关教程内容,更多关于CLion使用教程的内容可进入官网查看。
CLion| 下载试用
CLion是一款专为开发C及C++所设计的跨平台IDE。它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员的生产力。
CLion技术交流
标签:
来源:慧都
声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!