如何解释地址固定器输出
How to interpret AddressSanitizer output?
似乎已检测到 heap-buffer-overflow
的addressanitizer,但输出不像在这里那样清晰。
如何获得溢出的线?
如何解释此结果?
[1m[31m==27467== ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60a4000b2a80 at pc 0x40730e bp 0x7fffffffcf10 sp 0x7fffffffcf08
[1m[0m[1m[34mWRITE of size 8 at 0x60a4000b2a80 thread T0[1m[0m
#0 0x40730d (/home/user/Desktop/ImageRegistration/ImageRegistration+0x40730d)
#1 0x406624 (/home/user/Desktop/ImageRegistration/ImageRegistration+0x406624)
#2 0x40211b (/home/user/Desktop/ImageRegistration/ImageRegistration+0x40211b)
#3 0x402bf3 (/home/user/Desktop/ImageRegistration/ImageRegistration+0x402bf3)
#4 0x7ffff3866f44 (/lib/x86_64-linux-gnu/libc-2.19.so+0x21f44)
#5 0x401d78 (/home/user/Desktop/ImageRegistration/ImageRegistration+0x401d78)
[1m[32m0x60a4000b2a80 is located 0 bytes to the right of 74368-byte region [0x60a4000a0800,0x60a4000b2a80)
[1m[0m[1m[35mallocated by thread T0 here:[1m[0m
#0 0x7ffff413941a (/usr/lib/x86_64-linux-gnu/libasan.so.0.0.0+0x1541a)
#1 0x7ffff7b3bfb7 (/home/user/libs/opencv-2.4.13_QT/lib/libopencv_core.so.2.4.13+0x203fb7)
Shadow bytes around the buggy address:
0x0c150000e500: [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m
0x0c150000e510: [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m
0x0c150000e520: [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m
0x0c150000e530: [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m
0x0c150000e540: [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m [1m[0m00[1m[0m
=>0x0c150000e550:[[1m[31mfa[1m[0m][1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m
0x0c150000e560: [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m
0x0c150000e570: [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m
0x0c150000e580: [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m
0x0c150000e590: [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m
0x0c150000e5a0: [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m [1m[31mfa[1m[0m
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: [1m[0m00[1m[0m
Partially addressable: [1m[0m01[1m[0m [1m[0m02[1m[0m [1m[0m03[1m[0m [1m[0m04[1m[0m [1m[0m05[1m[0m [1m[0m06[1m[0m [1m[0m07[1m[0m
Heap left redzone: [1m[31mfa[1m[0m
Heap righ redzone: [1m[31mfb[1m[0m
Freed Heap region: [1m[35mfd[1m[0m
Stack left redzone: [1m[31mf1[1m[0m
Stack mid redzone: [1m[31mf2[1m[0m
Stack right redzone: [1m[31mf3[1m[0m
Stack partial redzone: [1m[31mf4[1m[0m
Stack after return: [1m[35mf5[1m[0m
Stack use after scope: [1m[35mf8[1m[0m
Global redzone: [1m[31mf9[1m[0m
Global init order: [1m[36mf6[1m[0m
Poisoned by user: [1m[34mf7[1m[0m
ASan internal: [1m[33mfe[1m[0m
==27467== ABORTING
听起来您需要在执行程序之前设置一些环境变量以获取可读的输出:即ASAN_OPTIONS
,symbolize
和ASAN_SYMBOLIZER_PATH
(假设您具有合适的符号化合物)。这样的东西:
ASAN_OPTIONS=symbolize=1 ASAN_SYMBOLIZER_PATH=$(shell which llvm-symbolizer) ./a.out
这是来自此处的文档
看起来您还将ANSI颜色代码复制到输出中。这是一个更清晰的版本:
==27467== ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60a4000b2a80 at pc 0x40730e bp 0x7fffffffcf10 sp 0x7fffffffcf08
WRITE of size 8 at 0x60a4000b2a80 thread T0
#0 0x40730d (/home/user/Desktop/ImageRegistration/ImageRegistration+0x40730d)
#1 0x406624 (/home/user/Desktop/ImageRegistration/ImageRegistration+0x406624)
#2 0x40211b (/home/user/Desktop/ImageRegistration/ImageRegistration+0x40211b)
#3 0x402bf3 (/home/user/Desktop/ImageRegistration/ImageRegistration+0x402bf3)
#4 0x7ffff3866f44 (/lib/x86_64-linux-gnu/libc-2.19.so+0x21f44)
#5 0x401d78 (/home/user/Desktop/ImageRegistration/ImageRegistration+0x401d78)
0x60a4000b2a80 is located 0 bytes to the right of 74368-byte region [0x60a4000a0800,0x60a4000b2a80)
allocated by thread T0 here:
#0 0x7ffff413941a (/usr/lib/x86_64-linux-gnu/libasan.so.0.0.0+0x1541a)
#1 0x7ffff7b3bfb7 (/home/user/libs/opencv-2.4.13_QT/lib/libopencv_core.so.2.4.13+0x203fb7)
Shadow bytes around the buggy address:
0x0c150000e500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c150000e510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c150000e520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c150000e530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c150000e540: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c150000e550:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c150000e560: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c150000e570: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c150000e580: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c150000e590: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c150000e5a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Heap righ redzone: fb
Freed Heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack partial redzone: f4
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
ASan internal: fe
==27467== ABORTING
要获取行号,您必须通过通过PATH
环境变量访问LLVM-Symbolizer二进制的路径,或者直接在ASAN_SYMBOLIZER_PATH
环境变量中指定其路径名。
相关文章:
- 为什么 ulimit -v 在 Clang 的地址清理器下不起作用?
- LeetCode 1:两和 - 地址清理器:堆缓冲区溢出地址
- 为什么我得到以下代码地址清理器:未知地址错误的SEGV
- 应用地址清理器后,免费无效指针消失
- 运行时错误地址清理器:LEETCODE 中的致命信号
- 如何在 godbolt.org 启用地址清理器
- 地址清理器仅在OS X上找到溢出
- 使用 Cmake 启用地址清理器
- 获取未定义的符号:尝试使用Clang地址清理器时__asan_memset
- C++ Opencv 地址清理器:未知地址0x000000000040上的 SEGV
- C++带有 CMakeList 的地址清理器.txt会导致 asan 错误
- 地址清理器和运行时加载动态库 ->(<未知模块>)
- 为什么 LeetCode 给出错误:地址清理器:堆缓冲区溢出
- 在 Xcode 中工作的 CMake 中启用地址清理器的正确方法是什么
- 私人捕获者和固定器
- 地址清理器在静态强制转换无效指针时报告错误
- OpenCL 在使用地址清理器编译主机应用程序时可用
- 我是否应该在课堂上使用固定器/获取器
- 地址清理器无法使用选项 -O 检测内存泄漏
- 如何解释地址固定器输出