作者QQ29 (我愛阿蓉)
看板C_and_CPP
標題[問題] 靜態程式碼分析PSV-Studio 錯誤詢問
時間Wed Jul 18 12:23:00 2012
大家好
目前在看一份靜態分析的report 並沒有對方的程式碼
他有一個error 是
http://www.viva64.com/en/d/0208/
說真的我看不太懂....
我可以理解他memset會因為在function結尾沒必要去做這件事而被compiler拔掉
但是他有敘述一些情境
"The function on the stack creates a temporary buffer intended for password
storage. When we finish working with the password, we want to clear this
buffer. If you don't do this, the password will remain in memory, which might
lead to unpleasant consequences"
他為什麼說 the password will remain in memory...
意思是function離開後
Stack的資料還存在在某 fixed的Address直到XXXX才會被overwrite?
XXXX我不太知道是什麼情況
MSDN也有描述類似scenario....
http://tinyurl.com/79skgnq
所以說若你password不清掉
有心人士還是可以在特定timing 擷取到你password的buffer?
請教各位
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.64.222
→ james732:VS2010用Release跑上面的code,就會把foo輸入的passwd 07/18 12:33
→ james732:在bar裡面印出來。 (Debug mode會自動清buf,Release不會 07/18 12:34
→ james732:儲存function區域變數的stack是個會被不斷重覆利用的空間 07/18 12:37
→ QQ29:謝謝, 剛有run他確實是這樣...所以良好習慣是 離開function 07/18 17:44
→ QQ29:要記得清除local資訊嚕? 07/18 17:44
→ QQ29:為啥他陣列分配的位置會是一樣的? 假如我刻意改成bar(int); 07/18 17:45
→ QQ29:發現他位址還是沒變...我認為他會被int占掉stack的前4B阿? 07/18 17:46
→ QQ29:不過結論是他不會影響password[]的位址 好怪 07/18 17:46
→ james732:其實要看你的資料有沒有敏感到需要清得乾乾淨淨 07/18 19:33