轉(zhuǎn)帖|其它|編輯:郝浩|2009-02-20 11:12:05.000|閱讀 680 次
概述:難以找到的漏洞一般出現(xiàn)在發(fā)放代碼的時(shí)候,而不是在修復(fù)的時(shí)候。我把這看作是非常規(guī)的錯(cuò)誤。這往往是由于未初始化變量造成的。修復(fù)的途徑之一是把您的應(yīng)用程序調(diào)用創(chuàng)建為OutputDebugString。在Windows32,這些是在Windows.h包含文件中聲明的。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
難以找到的漏洞一般出現(xiàn)在發(fā)放代碼的時(shí)候,而不是在修復(fù)的時(shí)候。我把這看作是非常規(guī)的錯(cuò)誤。這往往是由于未初始化變量造成的。修復(fù)的途徑之一是把您的應(yīng)用程序調(diào)用創(chuàng)建為OutputDebugString。在Windows32,這些是在Windows.h包含文件中聲明的。有些牽強(qiáng)的例子說(shuō)明了這一點(diǎn)。當(dāng)然現(xiàn)實(shí)中是由編譯器發(fā)出警告,所以你永遠(yuǎn)不應(yīng)該忽視編譯器的警告!
OutputDebugString()希望一個(gè)const char*,而這在C,C + +中很容易實(shí)現(xiàn)。盡管這可能需要些小技巧才能做到,不過(guò),不用擔(dān)心,我們有DbOutInt()。它需要一個(gè)字符串標(biāo)簽和一個(gè)int變量,使用一個(gè)字符串流來(lái)把int轉(zhuǎn)換為字符串,然后使用字符串元函數(shù)c_str(c)進(jìn)入C型字符串,這就是OutputDebugString()的要求。
#include "stdafx.h" // Only for Microsoft compilers
#include
#include
#include
using namespace std;
void DbgOutInt(string label, int value ) {
stringstream strs;
strs << value;
label.append(strs.str()) ;
const char *c_str =label.c_str() ;
OutputDebugString( c_str ) ;
}
int main(int argc, char* argv[])
{
int a;
int b=a+1;
DbgOutInt("Value of b= ",b) ;
cout << "Value of b = " << b << endl;
return 0;
}
此處明顯的漏洞是變量a沒(méi)有被初始化,并且由于修復(fù)輸出
Value of b= -858993459
是一個(gè)重要提示。
觀察修復(fù)輸出
如果你在一個(gè)修復(fù)器中運(yùn)行這個(gè),你應(yīng)該會(huì)在輸出窗口中看到輸出文本。在Borland和微軟IDEs中都有此功能。
你要從命令行中要求獲取修復(fù)輸出。
SysInternals.com修復(fù)查看功能
Sysinternals.com網(wǎng)頁(yè)(被微軟收購(gòu)了但其鏈接仍然可用)提供了一個(gè)非常好的功能,即故障排除觀察。它列入了混雜功能頁(yè)面并且下載起來(lái)十分便捷。
只要按照如上所述運(yùn)行該功能,并且在需要的時(shí)候點(diǎn)擊幫助說(shuō)明。你就可以隨時(shí)停止或啟動(dòng)登錄,并把獲得的輸出以文本文件的方式保存在磁盤(pán)里。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:IT專(zhuān)家網(wǎng)