堆缓冲区溢出-这是地址清除器的误报吗?

时间:2019-11-08 18:34:14

标签: c address-sanitizer libfuzzer

我有以下简单程序

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中的第二个字节时。

我真的不明白为什么这是一个错误。有什么解释吗?预先谢谢你。

1 个答案:

答案 0 :(得分:2)

b 未初始化时,您正在调用未定义的行为。从字面上看,“您要将数据复制到哪里?”

消毒剂是正确的,并且指出该问题对您有很大帮助。

该复制功能打算做什么?