錯誤: strncat-param-overlap

位址清理程式錯誤:strncat-param-overlap

在重迭緩衝區中移動記憶體的程式碼可能會導致難以診斷的錯誤。

範例

此範例示範 AddressSanitizer 如何攔截 CRT 函式重迭參數所造成的錯誤。

(根據 llvm-project/compiler-rt/test/asan/TestCases/strncat-overlap.cpp .)

// example1.cpp
// strncat-param-overlap error
#include <string.h>

void bad_function() {
    char buffer[] = "hello\0XXX";
    strncat(buffer, buffer + 1, 3); // BOOM
    return;
}

int main(int argc, char **argv) {
    bad_function();
    return 0;
}

若要建置及測試此範例,請在 Visual Studio 2019 16.9 版或更新版本的 開發人員命令提示字元 中執行下列命令:

cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe

產生的錯誤

Screenshot of debugger displaying strncat-param-overlap error in example 1.

另請參閱

AddressSanitizer 概觀
AddressSanitizer 已知問題
AddressSanitizer 組建和語言參考
AddressSanitizer 執行時間參考
AddressSanitizer 陰影位元組
AddressSanitizer 雲端或分散式測試
AddressSanitizer 偵錯工具整合
AddressSanitizer 錯誤範例