錯誤: heap-buffer-overflow - Microsoft Docs

文章推薦指數: 80 %
投票人數:10人

範例- 傳統堆積緩衝區溢位. C++ 複製. // example1.cpp // heap-buffer-overflow error #include #include int main(int argc, ... 跳到主要內容 已不再支援此瀏覽器。

請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。

下載MicrosoftEdge 其他資訊 目錄 結束焦點模式 語言 閱讀英文 儲存 目錄 閱讀英文 儲存 Twitter LinkedIn Facebook 電子郵件 目錄 錯誤:heap-buffer-overflow 發行項 07/19/2022 1位參與者 本文內容 位址清理程式錯誤:堆積緩衝區溢位 這個範例示範當記憶體存取發生在堆積設定物件界限外時所產生的錯誤。

範例-傳統堆積緩衝區溢位 //example1.cpp //heap-buffer-overflowerror #include #include intmain(intargc,char**argv){ char*x=(char*)malloc(10*sizeof(char)); memset(x,0,10); intres=x[argc*10];//Boom! free(x); returnres; } 若要建置及測試此範例,請在VisualStudio2019201916.9版或更新版本的開發人員命令提示字元中執行下列命令: clexample1.cpp/fsanitize=address/Zi devenv/debugexeexample1.exe 產生的錯誤 範例-不正確的向下轉換 //example2.cpp //heap-buffer-overflowerror classParent{ public: intfield; }; classChild:publicParent{ public: intextra_field; }; intmain(void){ Parent*p=newParent; Child*c=(Child*)p;//Intentionalerrorhere! c->extra_field=42; return0; } 若要建置及測試此範例,請在VisualStudio2019201916.9版或更新版本的開發人員命令提示字元中執行下列命令: clexample2.cpp/fsanitize=address/Zi devenv/debugexeexample2.exe 產生的錯誤-不正確的向下轉換 範例-將strncpy串入堆積 //example3.cpp //heap-buffer-overflowerror #include #include intmain(intargc,char**argv){ char*hello=(char*)malloc(6); strcpy(hello,"hello"); char*short_buffer=(char*)malloc(9); strncpy(short_buffer,hello,10);//Boom! returnshort_buffer[8]; } 若要建置及測試此範例,請在VisualStudio2019201916.9版或更新版本的開發人員命令提示字元中執行下列命令: clexample3.cpp/fsanitize=address/Zi devenv/debugexeexample3.exe 產生的錯誤-將strncpy寫入堆積 另請參閱 AddressSanitizer概觀 AddressSanitizer已知問題 AddressSanitizer組建和語言參考 AddressSanitizer執行時間參考 AddressSanitizer陰影位元組 AddressSanitizer雲端或分散式測試 AddressSanitizer偵錯工具整合 AddressSanitizer錯誤範例 本文內容



請為這篇文章評分?