PREfast(Prefast.exe)是微軟公司為驅(qū)動程序設(shè)計所提供的靜態(tài)的源代碼分析工具(static source code analysis tool),可偵測原始代碼中不易用一般編譯器找到的特定類型錯誤,與Windows DDK建置環(huán)境一同安裝。目前已集成至Visual Studio 2005 Team Suite中,使用時只要設(shè)置‘Enable Code Analysis For C/C++’為‘Yes’即可,接下來PREfast會攔截cl編譯器 (cl.exe) 的調(diào)用,產(chǎn)生由一次檢查所有文件所得的單一聯(lián)合清單,內(nèi)容屬于XML格式。
簡介PREfast(Prefast.exe)是微軟公司為驅(qū)動程序設(shè)計所提供的靜態(tài)的源代碼分析工具(static source code analysis tool),可偵測原始代碼中不易用一般編譯器找到的特定類型錯誤,與Windows DDK建置環(huán)境一同安裝。目前已集成至Visual Studio 2005Team Suite中,使用時只要設(shè)置‘Enable Code Analysis For C/C++’為‘Yes’即可,接下來PREfast會攔截cl編譯器 (cl.exe) 的調(diào)用,產(chǎn)生由一次檢查所有文件所得的單一聯(lián)合清單,內(nèi)容屬于XML格式。
偵測錯誤類別:
存儲器:內(nèi)存泄露(memory leak)。
資源:沒能即時釋放資源。
函數(shù)使用方式:不正確的函數(shù)引數(shù)、使用某個過時函數(shù)的情況。
浮點(diǎn)運(yùn)算狀態(tài)
優(yōu)先運(yùn)行規(guī)則
核心模式程序安全性考量1
PREfast的工作變量未初始化
void init() { int a; int b; b = a;}運(yùn)算對象優(yōu)先權(quán)的問題
void priority() { int a = 1; int b = 1; int c = 1; if(a & b == c) return ;}存儲器溢出問題
void overrun() { char buf[100]; char buf2[200]; int i = 100; sprintf(buf, "size%d" , i); strcpy(buf, buf2);}死循環(huán)
void infinite_loop() { int i; for(i = 100 ; i >= 0 ; i ++ ) { ; }}運(yùn)算對象誤用2
void op_misuse() { int a = 2; if (a = 2) return ;}相關(guān)條目Windows Driver Foundation
本詞條內(nèi)容貢獻(xiàn)者為:
王慧維 - 副研究員 - 西南大學(xué)