簡體   English   中英

簡單 C 程序中的緩沖區溢出

[英]Buffer-Overflow in simple C program

我寫了一個 C 程序,它檢查是否輸入了某個密碼,並在密碼正確時返回一個名為 Secret 的文件(至少這是它應該做的)。 在測試過程中,我發現當輸入數字 1 (111111111111111) 的 15 倍作為輸入時,它的行為不符合預期,文件 Secret 顯示得更加困難,這不是存儲在文件中的密碼。

我添加了刪除所有非字母字符的 sanitize 方法,但顯然沒有解決它。

我真的不明白為什么會出現溢出以及哪些變量(及其內存)受到影響。

c 中的字符串的最后一個字符必須為 '\0'(空終止符)。 這意味着,當您執行這樣的分配時:

char pass[15];

您確實為 null 終止符分配了 14 個字符和 1 個字符。

strcpy基於此工作。 如果您的字符串沒有終止符,您將獲得緩沖區溢出。

查看 15 1 的密碼,很明顯您沒有讓空間放置 null 終結器

為避免這種情況,請開始使用strncpy function 及其系列

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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