• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 23,  comments - 20,  trackbacks - 0
             
            最近又閑著了...
            技術(shù)人員一閑著就蛋疼...得找點(diǎn)東西學(xué) , 何況我還是一只小菜鳥   今天下了本電子書  看看C#的WinForm 一點(diǎn)一點(diǎn)來

            根據(jù)書上的知道  新建了第一個(gè)工程  發(fā)現(xiàn)了一個(gè)C#的關(guān)鍵字Region很有意思  折疊代碼用的 而且還能有注釋   相當(dāng)好用  特別是工程大了一點(diǎn)點(diǎn)以后  這個(gè)就使得代碼更加好看了 新語言就是好... 無奈 C++沒有這個(gè)關(guān)鍵字   不管有沒有  上網(wǎng)搜索一下吧   居然發(fā)現(xiàn)MSDN里面有
            MSDN 這個(gè)關(guān)鍵字   吼吼  看了一下 
            //語法描述
            #pragma region name
            #pragma endregion comment
            //END

            //實(shí)例代碼
            #pragma region Region_1
            void Test() {}
            void Test2() {}
            void Test3() {}
            #pragma endregion Region_1

            int main() {}
            我拿到工程里面去試了一下  居然沒有  MSDN騙人??才不會呢  旁邊有一個(gè)提醒框
            This page is specific to
            Microsoft Visual Studio 2005/.NET Framework 2. 0
            呵呵  我用的是VS2003   不過還好機(jī)器還裝了2008  測試一下  真的可以  哈哈  不錯(cuò)不錯(cuò) 

            posted @ 2009-09-03 12:22 李佳 閱讀(16195) | 評論 (14)編輯 收藏
            頭大 越學(xué)習(xí)  越多新的術(shù)語 ...

            列個(gè)表單  N年后自己再回來看看吧

            XML WinForm .Net 正則表達(dá)式 內(nèi)核編程 ASM 高級應(yīng)用程序調(diào)試   高級內(nèi)核編程(HOOK 與 反HOOK)
            還有么???想到了就增加吧...

            新增   WPF  WDF TDD

            累么??   不累!!

            posted @ 2009-09-02 20:51 李佳 閱讀(293) | 評論 (0)編輯 收藏
            最近在做一個(gè)網(wǎng)站的模擬登錄程序  前段時(shí)間一直忙于做驗(yàn)證碼  算是做好了
            今天才正式登陸   發(fā)送了無數(shù)次的登錄信息   一直增  改  就是登陸不了  總是提示錯(cuò)誤
            但是利用IE截獲的HTTP封包來看   幾乎都是一摸一樣的...
            這個(gè)是截獲的IE封包

            POST /app HTTP/1.1
            Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-silverlight, application/msword, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
            Referer: ***
            Accept-Language: zh-cn
            Content-Type: application/x-www-form-urlencoded
            Accept-Encoding: gzip, deflate
            User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 1.7; TencentTraveler 4.0;  Embedded Web Browser from: http://bsalsa.com/; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA)
            Host: ***
            Content-Length: 264
            Connection: Keep-Alive
            Cache-Control: no-cache
            Cookie: CHANNEL_JSESSIONID=Kc8GLn0Gvvn4Vl7sLjh5kN1nT5DZQknp1nXDRxch9GnTr5TYKncf!2134775339!730718407

            service=direct%2F1%2FHome%2F%24Form&sp=S0&Form0=%24FormConditional%2Cblogin%2C%24FormConditional%240&%24FormConditional=T&%24FormConditional%240=F&select=%B8%F6%C8%CB%BF%CD%BB%A7&SERIAL_NUMBER=111222333&USER_PASSWD=123123&EFFICACY_CODE=2598&blogin=+%B5%C7%C2%BC+

            以下是我發(fā)送出去的封包
            POST /app HTTP/1.1
            Content-Type: application/x-www-form-urlencoded
            Referer: ***
            Accept: */*
            User-Agent: GetBalance
            Host: ***
            Content-Length: 300
            Cache-Control: no-cache
            Cookie: CHANNEL_JSESSIONID=Kc3V7JTn32G0G6yj8KnyhYpRHvHp1gf9pX033l5WjZV6gRh75ZRn!-1722555788!2134775339

            service=direct%2F1%2Ffeequery.FeeQuery%2F%24HHeader.%24GHHeader.%24Form&sp=S0&Form0=%24FormConditional%2Cblogin%2C%24FormConditional%240&%24FormConditional=T&%24FormConditional%240=F&select=%B8%F6%C8%CB%BF%CD%BB%A7&SERIAL_NUMBER=111222333&USER_PASSWD=123123&EFFICACY_CODE=1204&blogin=+%B5%C7%C2%BC+

            幾乎都無誤  以前登陸的無數(shù)的網(wǎng)站  都還沒有這么多頭   這次一個(gè)一個(gè)的增加  加了這么多的頭  居然還是不行
            煩的狠  就用火狐打開看看  顯示 "Components Head not exist"    我的IE可沒有顯示這個(gè)信息
            聯(lián)想到以前在邪八里面看到的文章  里面似乎提過User-Agent檢測    是不是這個(gè)網(wǎng)站也增加了這個(gè)檢測呢???
            于是 在Post數(shù)據(jù)中在增加一行
            pFile -> AddRequestHeaders("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 1.7; TencentTraveler 4.0;  Embedded Web Browser from: http://bsalsa.com/; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA)");
            提交  居然顯示成功了...
            汗...
            保留下來  以備不時(shí)之需

            posted @ 2009-09-01 10:19 李佳 閱讀(1522) | 評論 (0)編輯 收藏
             1 
             2    CString Fullstring, Appname, Fileext;
             3    Fullstring.LoadString(IDR_MAINFRAME);
             4     //獲取完整的分割串
             5    AfxExtractSubString(Appname, Fullstring, 0'\n');    
             6     //析出第一個(gè)子串
             7    AfxExtractSubString(Fileext, Fullstring, 4'\n');    
             8     //析出第四個(gè)子串

            CString 和COleDateTime之間的轉(zhuǎn)換
            CString   str   
            =   "2004-07-08   11:22:33";     
                    COleVariant   VariantTime;   
                    VariantTime   
            =   str;   
                    VariantTime.ChangeType(VT_DATE);   
                    COleDateTime   DataTime   
            =   VariantTime;  
            STR)strHTML,strHTML.GetLength(),5 tmp,strHTML.GetLength()+1);
            6     strHTML = tmp;
            7     delete tmp;
            8 

            _RecordsetPtr bInDateBase = m_pConn->Execute((_variant_t)strSQL , &index , 1);
            if (!bInDateBase->adoEOF)    //有數(shù)據(jù)
            {
            }

            1 _variant_t var;
            2 var= m_pRecordset->GetCollect("posInfo");        //可能為空
            3 if(var.vt != VT_NULL)    //為NULL
            4     strPosInfo = var;
            5 else 
            6     strPosInfo = “”;
            7 
             1 //將字符串?dāng)?shù)字傳換成BCD碼 -- 例如  "1234"  ->  0x1234
             2 void CGPS_Info_Redirect_CZDlg::CStringDataToBCDData(CString strData , BYTE* bBCD)
             3 {         
             4     for (int i = 0 ; i < strData.GetLength() ; i++)
             5     {
             6         ASSERT(strData[i] >= '0' && strData[i] <='9');
             7         if (i % 2 == 0)    //1,3,5,7,9
             8         {
             9             bBCD[i/2=(strData[i] - 0x30)<<4;//左移四位            
            10         }
            11         else
            12         {
            13             bBCD[i/2+= (strData[i] - 0x30);
            14         }
            15     }
            16 }
             1 //將int類型copy到BYTE數(shù)組中
             2 void CGPS_Info_Redirect_CZDlg::CopyIntToByte(BYTE* data , int iData)
             3 {
             4     WORD wHigh = HIWORD(iData);
             5     WORD wLow = LOWORD(iData);
             6     data[0= HIBYTE(wHigh);
             7     data[1= LOBYTE(wHigh);
             8     data[2= HIBYTE(wLow);
             9     data[3= LOBYTE(wLow);
            10 }
            11 

            posted @ 2009-08-28 17:08 李佳 閱讀(251) | 評論 (0)編輯 收藏
                 摘要: 驅(qū)動其實(shí)很早以前就寫了  只不過功能沒有達(dá)到  加上一直很忙 所以就放下了 今天閑著無聊  就接著寫吧...寫完了 發(fā)上來 留著 主要的問題就是效率很低下   不知道為什么有大量的IRP_MJ_DEVICE_CONTROL 這個(gè)IRP  CPU全部占滿程序很簡單  暴力枚舉 主要是鍛煉一下內(nèi)核編程 以及WinDbg的調(diào)試頭文件...  閱讀全文
            posted @ 2009-08-28 16:20 李佳 閱讀(1517) | 評論 (0)編輯 收藏
            由于昨天太晚 沒有看完 今天繼續(xù)看  繼續(xù)轉(zhuǎn)
            原帖地址
            http://blog.csdn.net/vagrxie/archive/2009/07/31/4398721.aspx
            今天要轉(zhuǎn)的就是  SEH + MiniDump  實(shí)現(xiàn)既Dump文件  又讓程序繼續(xù)運(yùn)行

             1 #include "stdafx.h"
             2 #include <windows.h>
             3 #include <Dbghelp.h>
             4 using namespace std;
             5 
             6 #pragma auto_inline (off)
             7 #pragma comment( lib, "DbgHelp" )
             8 
             9 // 為了程序的簡潔和集中關(guān)注關(guān)心的東西,按示例程序的慣例忽略錯(cuò)誤檢查,實(shí)際使用時(shí)請注意
            10 
            11 LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo    )
            12 {
            13     HANDLE lhDumpFile = CreateFile(_T("DumpFile.dmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL ,NULL);
            14     MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
            15     loExceptionInfo.ExceptionPointers = ExceptionInfo;
            16     loExceptionInfo.ThreadId = GetCurrentThreadId();
            17     loExceptionInfo.ClientPointers = TRUE;
            18     MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),lhDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);
            19     CloseHandle(lhDumpFile);
            20     return EXCEPTION_EXECUTE_HANDLER;
            21 }
            22 
            23 void Fun2()
            24 {
            25     __try
            26     {
            27         static bool b = false;
            28         if(!b)
            29         {
            30             b = true;
            31             int *= NULL;
            32             *= 0;
            33         }
            34         else
            35         {
            36             MessageBox(NULL, _T("Here"), _T(""), MB_OK);
            37         }
            38     }
            39     __except(MyUnhandledExceptionFilter(GetExceptionInformation()))
            40     {
            41     }
            42 }
            43 
            44 void Fun()
            45 {
            46     Fun2();
            47 }
            48 
            49 int main()
            50 {
            51     Fun();
            52     Fun();  //用于顯示MessageBox
            53     return 1;
            54 }
            55 
            56 
            最后轉(zhuǎn)一句話
            Make it right before you make it faster. Keep it right when you make it faster. Make it clear before you make it faster. Do not sacrifice clarity for small gains in efficiency.
            posted @ 2009-08-28 09:16 李佳 閱讀(587) | 評論 (0)編輯 收藏
            DUMP文件很實(shí)用  留下來
             1 LONG WINAPI MyUnhandledExceptionFilter(      _EXCEPTION_POINTERS *ExceptionInfo     );
             2 
             3 //在程序里面調(diào)用
             4 SetUnhandledExceptionFilter(&MyUnhandledExceptionFilter);
             5 //來設(shè)置
             6 LONG WINAPI MyUnhandledExceptionFilter( _EXCEPTION_POINTERS *ExceptionInfo )
             7 {
             8     HANDLE lhDumpFile = CreateFile(_T("DumpFile.dmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL ,NULL);
             9 
            10     MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
            11 
            12     loExceptionInfo.ExceptionPointers = ExceptionInfo;
            13 
            14     loExceptionInfo.ThreadId = GetCurrentThreadId();
            15 
            16     loExceptionInfo.ClientPointers = TRUE;
            17 
            18     MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),lhDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);
            19 
            20     CloseHandle(lhDumpFile);
            21 
            22     return EXCEPTION_EXECUTE_HANDLER;
            23 }


            posted @ 2009-08-27 18:08 李佳 閱讀(203) | 評論 (0)編輯 收藏
            靠 什么事情都不先說清楚  需求也不說  就是讓你做   做完了 再說需求   靠...
            好煩   今天又得改程序...

            沒事好好看看軟件架構(gòu)方面的書吧   被經(jīng)理能整死

            學(xué)習(xí)中...痛苦中...

            posted @ 2009-08-24 09:58 李佳 閱讀(102) | 評論 (0)編輯 收藏
            當(dāng)數(shù)據(jù)庫的選項(xiàng)允許為空時(shí)  而且此時(shí)內(nèi)容為空
            則一下查詢會出錯(cuò)
            strPosInfo= m_pRecordset->GetCollect("posInfo");       
            更加奇怪的是  catch(...)也抓不到異常
            今天碰著個(gè)問題算是頭弄大了  最后終于弄好了
            原因很簡單

            報(bào)錯(cuò)的問題

            錯(cuò)誤原因   在GetCollct返回了NULL之后   由于strPosInfo是一個(gè)CString對象  編譯器自動將_varint_t轉(zhuǎn)換成CString  而此時(shí)_varint_t為空  因此轉(zhuǎn)換失敗  不是數(shù)據(jù)庫的異常 而且根本就不是異常 所以  catch(…)無法抓住

            解決方案

            在可能為空的地方 利用

             1 _variant_t var;
             2 
             3 var= m_pRecordset->GetCollect("posInfo");          //可能為空
             4 
             5 if(var.vt != VT_NULL)   //為NULL
             6 
             7        strPosInfo = var;
             8 
             9 else
            10 
            11        strPosInfo = “”;

            就可以檢測NULL值了




            posted @ 2009-08-21 16:01 李佳 閱讀(2415) | 評論 (1)編輯 收藏
            服務(wù)器又出問題了   實(shí)在是沒辦法了  因?yàn)槟堑缅e(cuò)誤我這邊沒辦法重現(xiàn)  也不知道如何寫dump文件 而經(jīng)理又不讓安裝VS  沒辦法  最后只能使用WinDbg 來調(diào)試了  網(wǎng)上找了相關(guān)資料
            先Copy下來吧  以后還是會用的   還有  要買書了  在學(xué)校的時(shí)候看見了<軟件調(diào)試>  只是覺得厚   沒怎么看  現(xiàn)在后悔了...  要買了

            先Copy資料吧


            本篇文章得主要目的是介紹WINDBG的主要功能以及相關(guān)的命令。關(guān)于這些命令的詳細(xì)語法,請參閱幫助文件。對文章中提到的許多命令,WINDBG有相應(yīng)的菜單選項(xiàng)。
            1.如何得到幫助

             在命令(Command)窗口中輸入.hh 命會調(diào)出幫助文件令。

             .hh keyword

            會顯示關(guān)于keyword的詳細(xì)命令。

            2.啟動Debugger

             Windbg可以用于如下三種調(diào)試:

             a.遠(yuǎn)程調(diào)試:你可以從機(jī)器A上調(diào)試在機(jī)器B上執(zhí)行的程序。具體步驟如下:

            ? 在機(jī)器B上啟動一個(gè)調(diào)試窗口(Debug Session)。你可以直接在Windbg下運(yùn)行一個(gè)程序或者將Windbg附加(Attach)到一個(gè)進(jìn)程。

            ? 在機(jī)器B的Windbg命令窗口上啟動一個(gè)遠(yuǎn)程調(diào)試接口(remote):

            .server npipe:pipe=PIPE_NAME

            PIPE_NAME是該接口的名字。

            ? 在機(jī)器A上運(yùn)行:

            windbg –remote npipe:server=SERVER_NAME,pipe=PIPE_NAME

            SERVER_NAME是機(jī)器B的名字。

            b.Dump文件調(diào)試:如果在你的客戶的機(jī)器上出現(xiàn)問題,你可能不能使用遠(yuǎn)程調(diào)試來解決問題。你可以要求你的用戶將Windbg附加到出現(xiàn)問題的進(jìn)程上,然后在命令窗口中輸入:

            .dump /ma File Name

            創(chuàng)建一個(gè)Dump文件。在得到Dump文件后,使用如下的命令來打開它:

            windbg –z DUMP_FILE_NAME

            c.本地進(jìn)程調(diào)試:你可以在Windbg下直接運(yùn)行一個(gè)程序:

            Windbg “path to executable” arguments

            也可以將Windbg附加到一個(gè)正在運(yùn)行的程序:

            Windbg –p “process id”

            Windbg –pn “process name”

            注意有一種非侵入(Noninvasive)模式可以用來檢查一個(gè)進(jìn)程的狀態(tài)并不進(jìn)程的執(zhí)行。當(dāng)然在這種模式下無法控制被調(diào)試程序的執(zhí)行。這種模式也可以用于查看一個(gè)已經(jīng)在Debugger控制下運(yùn)行的進(jìn)程。具體命令如下:

            Windbg –pv –p “process id”

            Windbg –pv –pn “process name”


            ------------------------------------------------------------

            調(diào)試多個(gè)進(jìn)程和線程

             如果你想控制一個(gè)進(jìn)程以及它的子進(jìn)程的執(zhí)行,在Windbg的命令行上加上-o選項(xiàng)。Windbg中還有一個(gè)新的命令.childdbg 可以用來控制子進(jìn)程的調(diào)試。如果你同時(shí)調(diào)試幾個(gè)進(jìn)程,可以使用 | 命令來顯示并切換到不同的進(jìn)程。

            在同一個(gè)進(jìn)程中可能有多個(gè)線程。~命令可以用來顯示和切換線程。

             ------------------------------------------------------------

            調(diào)試前的必備工作

            在開始調(diào)試前首先要做的工作是設(shè)置好符號(Symbols)路徑。沒有符號,你看到的調(diào)用堆棧基本上毫無意義。Microsoft的操作系統(tǒng)符號文 件(PDB)是對外公開的。另外請注意在編譯你自己的程序選擇生成PDB文件的選項(xiàng)。如果設(shè)置好符號路徑后,調(diào)用堆??雌饋磉€是不對。可以使用lm, !sym noisy, !reload 等命令來驗(yàn)證符號路徑是否正確。

            Windbg也支持源碼級的調(diào)試。在開始源碼調(diào)試前,你需要用.srcpath設(shè)置源代碼路徑。如果你是在生成所執(zhí)行代碼的機(jī)器上進(jìn)行調(diào)試,符號文 件中的源碼路徑會指向正確的位置,所以不需要設(shè)置源代碼路徑。如果所執(zhí)行代碼是在另一臺機(jī)器上生成的,你可以將所用的源碼拷貝(保持原有的目錄結(jié)構(gòu))的一 個(gè)可以訪問的文件夾(可以是網(wǎng)絡(luò)路徑)并將源代碼路徑設(shè)為該文件夾的路徑。注意如果是遠(yuǎn)程調(diào)試,你需要使用.lsrcpath來設(shè)置源碼路徑。

             ------------------------------------------------------------

            靜態(tài)命令:

            1.顯示調(diào)用堆棧:在連接到一個(gè)調(diào)試窗口后,首先要知道的就是程序當(dāng)前的執(zhí)行情況k* 命令顯示當(dāng)前線程的堆棧。~*kb會顯示所有線程的調(diào)用堆棧。如果堆棧太長,Windbg只會顯示堆棧的一部分。.kframes可以用來設(shè)置缺省顯示框架數(shù)。

            2.顯示局部變量:接下來要做通常是用dv顯示局部變量的信息。CTRL+ALT+V可以切換到更詳細(xì)的顯示模式。關(guān)于dv要注意的是在優(yōu)化過的代 碼中dv的輸出極有可能是不準(zhǔn)確的。這時(shí)后你能做的就是閱讀匯編代碼來發(fā)現(xiàn)你感興趣的值是否存儲在寄存器中或堆棧上。有時(shí)后當(dāng)前的框架(Frame)上可 能找不到你想知道的數(shù)據(jù)。如果該數(shù)據(jù)是作為參數(shù)傳到當(dāng)前的方法中的,可以讀一讀上一個(gè)或幾個(gè)框架的匯編代碼,有可能該數(shù)據(jù)還在堆棧的某個(gè)地址上。靜態(tài)變量 是儲存在固定地址中的,所以找出靜態(tài)變量的值較為容易。.Frame(或者在調(diào)用堆棧窗口中雙擊)可以用來切換當(dāng)前的框架。注意dv命令顯示的是當(dāng)前框架 的內(nèi)容。你也可在watch窗口中觀察局部變量的值。

            3.顯示類和鏈表: dt可以顯示數(shù)據(jù)結(jié)構(gòu)。比如dt PEB 會顯示操作系統(tǒng)進(jìn)程結(jié)構(gòu)。在后面跟上一個(gè)進(jìn)程結(jié)構(gòu)的地址會顯示該結(jié)構(gòu)的詳細(xì)信息:dt PEB 7ffdf000。

            Dl命令可以顯示一些特定的鏈表結(jié)構(gòu)。

            4.顯示當(dāng)前線程的錯(cuò)誤值:!gle會顯示當(dāng)前線程的上一個(gè)錯(cuò)誤值和狀態(tài)值。!error命令可以解碼HRESULT。

            5.搜索或修改內(nèi)存:使用s 命令來搜索字節(jié),字或雙字,QWORD或字符串。使用e命令來修改內(nèi)存。

            6.計(jì)算表達(dá)式:?命令可以用來進(jìn)行計(jì)算。關(guān)于表達(dá)式的格式請參照幫助文檔。使用n命令來切換輸入數(shù)字的進(jìn)制。

            7.顯示當(dāng)前線程,進(jìn)程和模塊信息:!teb顯示當(dāng)前線程的環(huán)境信息。最常見的用途是查看當(dāng)前線程堆棧的起始地址,然后在堆棧中搜索值。!peb顯示當(dāng)前進(jìn)程的環(huán)境信息,比如執(zhí)行文件的路徑等等。lm顯示進(jìn)程中加載的模塊信息。

            8.顯示寄存器的值:r命令可以顯示和修改寄存器的值。如果要在表達(dá)式中使用寄存器的值,在寄存器名前加@符號(比如@eax)。

            9.顯示最相近的符號:ln Address。如果你有一個(gè)C++對象的指針,可以用來ln來查看該對象類型。

            10.查找符號:x命令可以用來查找全局變量的地址或過程的地址。x命令支持匹配符號。x kernel32!*顯示Kernel32.dll中的所有可見變量,數(shù)據(jù)結(jié)構(gòu)和過程。

             

            11.查看lock:!locks顯示各線程的鎖資源使用情況。對調(diào)試死鎖很有用。

            12.查看handle:!handle顯示句柄信息。如果一段代碼導(dǎo)致句柄泄漏,你只需要在代碼執(zhí)行前后使用!handle命令并比較兩次輸出的區(qū)別。有一個(gè)命令!htrace對調(diào)試與句柄有關(guān)的Bug非常有用。在開始調(diào)試前輸入:

            !htrace –enable

            然后在調(diào)試過程中使用!htrace handle_value 來顯示所有與該句柄有關(guān)的調(diào)用堆棧。

            13.顯示匯編代碼:u。

            ------------------------------------------------------------

            程序執(zhí)行控制命令:

            1.設(shè)置代碼斷點(diǎn):bp/bu/bm 可以用來設(shè)置代碼斷點(diǎn)。你可以指定斷點(diǎn)被跳過的次數(shù)。假設(shè)一段代碼KERNEL32!SetLastError在運(yùn)行很多次后會出錯(cuò),你可以設(shè)置如下斷點(diǎn):

            bp KERNEL32!SetLastError 0x100.

            在出錯(cuò)后使用bl 來顯示斷點(diǎn)信息(注意粗體顯示的值):

            0 e 77e7a3b0 004f (0100) 0:*** KERNEL32!SetLastError

            重新啟動調(diào)試(.restart命令)并設(shè)置如下的斷點(diǎn):

            bp Kernel32!SetLastError 0x100-0x4f

            Debugger會停在出錯(cuò)前最后一次調(diào)用該過程的地方。

            你可以指定斷點(diǎn)被激活時(shí)Debugger應(yīng)當(dāng)執(zhí)行的命令串。在該命令串中使用J命令可以用來設(shè)置條件斷點(diǎn):

            bp `mysource.cpp:143` "j (poi(MyVar)”0n20) ''; 'g' "

            上面的斷點(diǎn)只在MyVar的值大于32時(shí)被激活(g命令

            條件斷點(diǎn)的用途極為廣泛。你可以指定一個(gè)斷點(diǎn)只在特殊的情況下被激活,比如傳入的參數(shù)滿足一定的條件,調(diào)用者是某個(gè)特殊的過程,某個(gè)全局變量被設(shè)為特殊的值等等。

            2.設(shè)置內(nèi)存斷點(diǎn):ba可以用來設(shè)置內(nèi)存斷點(diǎn)。調(diào)試過程中一個(gè)常見的問題是跟蹤某些數(shù)據(jù)的變化。如下的斷點(diǎn):

            ba w4 0x40000000 "kb; g"

            可以打印出所有修改0x40000000的調(diào)用堆棧。

            3.控制程序執(zhí)行:p, pa,t, ta等命令可以用來控制程序的執(zhí)行。

            4.控制異常和事件處理:Debugger的缺省設(shè)置是跳過首次異常(first chance expcetion),在二次異常(second chance exception)時(shí)中斷程序的執(zhí)行。sx命令顯示Debugger的設(shè)置。sxe和sxd可以改變Debugger的設(shè)置。

            sxe clr

            可以控制Debugger在托管異常發(fā)生時(shí)中斷程序的執(zhí)行。常用的Debugger事件有:

            av 訪問異常

            eh C++異常

            clr 托管異常

            ld 模塊加載

            -c 選項(xiàng)可以用來指定在事件發(fā)生時(shí)執(zhí)行的調(diào)試命令。

            powerwolf 發(fā)表于:2006.07.03 15:02
            reference url:  http://powerwolf.itpub.net/post/20237/130218


            特別要注意的就是!gle   這個(gè)命令相當(dāng)于執(zhí)行GetLastError()  而且還能查看內(nèi)核的NTSTATUS

            問題剛剛解決了    最后出現(xiàn)的問題也找到了   但是錯(cuò)誤原因大跌眼鏡   ------殺毒軟件...

            結(jié)論:
            雖然我們需要豐富的調(diào)試技巧  但是  經(jīng)驗(yàn)仍然是最重要的
            就像找工作一樣  學(xué)校里面你再牛   沒有經(jīng)驗(yàn)  你都比不過工作兩年的高中生

            posted @ 2009-08-20 11:51 李佳 閱讀(488) | 評論 (0)編輯 收藏
            僅列出標(biāo)題
            共3頁: 1 2 3 
            <2016年10月>
            2526272829301
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久香综合精品久久伊人| 999久久久国产精品| 一本色道久久HEZYO无码| 日产精品久久久久久久| 久久精品国产亚洲AV麻豆网站| 国产综合精品久久亚洲| 久久精品人人做人人爽电影| 18岁日韩内射颜射午夜久久成人| 热99re久久国超精品首页| 久久综合给合久久狠狠狠97色 | 国产午夜电影久久| 久久综合九色综合网站| 久久夜色精品国产| 97精品国产97久久久久久免费| 一级做a爰片久久毛片毛片| 欧美一级久久久久久久大| 国产精品美女久久久久AV福利| 一级做a爰片久久毛片看看| 久久综合中文字幕| 狠狠色丁香久久婷婷综合| 亚洲美日韩Av中文字幕无码久久久妻妇 | 无码人妻久久一区二区三区 | 国产精自产拍久久久久久蜜| 99久久国产精品免费一区二区| 国产精品内射久久久久欢欢| 国产亚洲精品自在久久| 91视频国产91久久久| 久久免费精品一区二区| 久久国产欧美日韩精品| 日本加勒比久久精品| 久久久国产精华液| 中文无码久久精品| 久久亚洲精品无码aⅴ大香| 久久国产高清一区二区三区| 亚洲国产成人久久综合碰碰动漫3d| 久久久久亚洲AV成人网人人网站 | 精品国产一区二区三区久久蜜臀| 国内精品久久久久久久97牛牛| 亚洲精品白浆高清久久久久久| 国内精品久久国产| 一本久道久久综合狠狠爱|