我正在使用Delphi 7 IDE。 Delphi編譯器是否優化了代碼,就像C++編譯器在這個鏈接中所做的一樣?Delphi編譯器是否執行優化?
http://msdn.microsoft.com/en-us/library/aa366877(VS.85).aspx
WCHAR szPassword[MAX_PATH];
// Retrieve the password
if (GetPasswordFromUser(szPassword, MAX_PATH))
UsePassword(szPassword);
// Clear the password from memory
SecureZeroMemory(szPassword, sizeof(szPassword));
如果ZeroMemory
在這個例子中,而不是SecureZeroMemory
被稱爲,編譯器可以優化呼叫,因爲szPassword
緩衝區不是從它超出範圍之前閱讀。密碼將保留在應用程序堆棧中,以便在崩潰轉儲中捕獲密碼或由惡意應用程序進行探測。
其實我有。完全不被調用的方法不會被包含在你的.EXE中,而你放在那裏的斷點將不會顯示爲可用。 – 2010-11-03 04:10:13
這種情況不同,@Jeroen。 Loren正在談論* *可達的代碼,但如果它被執行則不會有任何效果。充足的智能編譯器可以認識到代碼沒有任何作用並且可以忽略它。一個很好的例子就是問題中的問題,在清除密碼數組之後永遠不會使用密碼數組。如果編譯器知道把'ZeroMemory'作爲賦值語句,並且它被設置爲優化以後從不使用的賦值,那麼調用'ZeroMemory'可能會被消除。 'SecureZeroMemory'只是一個編譯器不知道可以省略的新函數。 – 2010-11-03 13:20:17