看板 C_and_CPP 關於我們 聯絡資訊
大家好 目前在看一份靜態分析的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:http://ideone.com/jtcZ3 07/18 12:32
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