![](/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.