![](/img/trans.png)
[英]Why is address-sanitizer causing a heap-buffer-overflow error in my multiplication matrix?
[英]Heap buffer overflow--is this a false positive of address sanitizer?
我有以下简单的程序
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 中的第二个字节时。
我无法真正理解为什么这是一个错误。 有什么解释吗? 先感谢您。
由于b在您对其进行memcpy时未初始化,因此您正在调用未定义的行为。 从字面上看,“您要将数据复制到哪里?”
消毒剂是正确的,指出这个问题对你有很大帮助。
那个副本 function 打算做什么?
void copy(const int16_t *buffer) {
int16_t *b;
memcpy(b,buffer,2);
return ;
}
当memcpy()
复制到“指向”它的缓冲区时b
的值是多少?
您可能正在尝试复制指针的值,而不是它们指向的 memory,在这种情况下,您将使用类似的东西:
memcpy(&b, &buffer, sizeof b);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.