共用方式為


錯誤: 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

產生的錯誤

顯示範例 1 中 strncat-param-overlap 錯誤的調試程序螢幕快照。

另請參閱

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