簡體   English   中英

堆緩沖區溢出——這是地址清理程序的誤報嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM