我有以下简单的程序
void copy(const int16_t *buffer) {
int16_t *b;
memcpy(b,buffer,2);
return ;
}
int LLVMFuzzerTestOneInput(const int16_t *buffer) {
copy(buffer);
return 0;
}
我使用clang(v9)使用地址清理器和模糊器标志编译如下
clang -fsanitize=address,fuzzer -g test5.c
当我运行生成的可执行文件时,模糊器发现由于无效读取导致堆缓冲区溢出 - 特别是在尝试复制 memcpy 中的第二个字节时。
我无法真正理解为什么这是一个错误。有什么解释吗?先感谢您。