我有以下简单程序
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中的第二个字节时。
我真的不明白为什么这是一个错误。有什么解释吗?预先谢谢你。
答案 0 :(得分:2)
b 未初始化时,您正在调用未定义的行为。从字面上看,“您要将数据复制到哪里?”
消毒剂是正确的,并且指出该问题对您有很大帮助。
该复制功能打算做什么?