-1

我有以下简单的程序

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

我无法真正理解为什么这是一个错误。有什么解释吗?先感谢您。

4

1 回答 1

3

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

消毒剂是正确的,指出这个问题对你有很大帮助。

该复制功能打算做什么?

于 2019-11-08T19:24:32.013 回答