疑问是:
- memmove/memcpy不能拷贝到有值的dest中吗?
- 报错"SEGV on unknown address"为什么说是未知地址呢? src/dest已经有地址了啊。
如下代码:
char* src = "abcde";
char* dest = "12345";
memmove(dest, src, 5);
printf("%s\n", dest);
编译方式:
g++ -g -fsanitize=address -fno-omit-frame-pointer -fsanitize=leak 1.cpp
执行二进制文件报错:
ASAN:DEADLYSIGNAL
=================================================================
==23128==ERROR: AddressSanitizer: SEGV on unknown address 0x56540390b0c4 (pc 0x7fa77d13bad4 bp 0x7ffeb2ea83e0 sp 0x7ffeb2ea7b48 T0)
==23128==The signal is caused by a WRITE memory access.
#0 0x7fa77d13bad3 (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xfcad3)
#1 0x7fa77d0b9d1d in __interceptor_memmove (/usr/lib/x86_64-linux-gnu/libasan.so.4+0x7ad1d)
#2 0x56540390ae1f in main /home/tom/work/test/excercise/1.cpp:28
#3 0x7fa77c8e6c86 in __libc_start_main (/home/tom/work/tools/sensor_check/lib/libc.so.6+0x21c86)
#4 0x56540390ad09 in _start (/home/tom/work/test/excercise/a.out+0xd09)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xfcad3)
==23128==ABORTING
const char*
)