日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

      首頁編程開發(fā)其它知識 → Windbg腳本和擴展命令工具示例

      Windbg腳本和擴展命令工具示例

      相關軟件相關文章發(fā)表評論 來源:西西整理時間:2012/11/30 18:30:11字體大。A-A+

      作者:西西點擊:0次評論:0次標簽: 腳本

      • 類型:專業(yè)工具大。216KB語言:中文 評分:6.6
      • 標簽:
      立即下載

      好長一段時間沒寫文章了,最近一直忙于為項目的可調(diào)式性做一些腳本和擴展工具,鑒于對windbg強大威力的震撼,以及相對較少的資料,筆者決定寫一系列關于如何開發(fā)Windbg腳本和擴展命令的文章,您的支持是我最大的動力,希望本系列文章對您有所幫助。

      那么一個完整的windbg script是什么樣子的呢?首先讓我們看如下示例:

      $$ 該腳本是列出用戶進程和棧

      r $t0 = nt!PSActiveProcessHead 
      .for (r $t1 = poi(@$t0); (@$t1 != 0) & (@$t1 != @$t0); r $t1 = poi(@$t1)) 

        r? $t2 = #CONTAINING_RECORD(@$t1, nt!_EPROCESS, ActiveProcessLinks); 
        .process @$t2 
        .reload 
        !process @$t2
      }

      相對于Windbg腳本,windbg擴展比較復雜,而且通常需要花費更大的精力寫出同樣的功能,但是它帶來的一個好處就是你可以獲得更多的功能,你甚至可以通過這些擴展寫一個調(diào)試器,那么一個完整的windbg擴展又是什么樣子的呢?該擴展dll打印出一個全局字符串的值。

      以C++語言編寫的windbg擴展示例:

      HRESULT CALLBACK 
      PrintPTR(PDEBUG_CLIENT pDebugClient, PCSTR args)
      {
          UNREFERENCED_PARAMETER(args);

          IDebugSymbols* pDebugSymbols;
          if (SUCCEEDED(pDebugClient->QueryInterface(__uuidof(IDebugSymbols), (void **)&pDebugSymbols)))
          {    // Resolve the symbol
              ULONG64 ulAddress = 0;
              if (SUCCEEDED(pDebugSymbols->GetOffsetByName("TestSTLMap!g_wString", &ulAddress)))
              {
                  IDebugDataSpaces* pDebugDataSpaces;
                  if (SUCCEEDED(pDebugClient->QueryInterface(__uuidof(IDebugDataSpaces), (void **)&pDebugDataSpaces)))
                  {    // Read the value of the pointer from the target address space
                      ULONG64 ulPtr = 0;
                      if (SUCCEEDED(pDebugDataSpaces->ReadPointersVirtual(1, ulAddress, &ulPtr)))
                      {
                          PDEBUG_CONTROL pDebugControl;
                          if (SUCCEEDED(pDebugClient->QueryInterface(__uuidof(IDebugControl), (void **)&pDebugControl)))
                          {    // Output the values
                              pDebugControl->Output(DEBUG_OUTPUT_NORMAL, "%p TestSTLMap!g_wString= 0x%p\n", ulAddress, ulPtr);
                              pDebugControl->Output(DEBUG_OUTPUT_NORMAL, "%mu\n", ulPtr);
                              pDebugControl->Release();
                          }
                      }
                      pDebugDataSpaces->Release();
                  }
                  pDebugSymbols->Release();
              }
          }
          return S_OK;
      }

      總結(jié)

      基于筆者的研究發(fā)現(xiàn),國內(nèi)做相關研究的人并不多,其實國外也就幾個業(yè)內(nèi)比較牛的人做的相對比較好,但是這些工具的作用足以讓你震撼,今天開個頭,有興趣的朋友可以繼續(xù)關注后續(xù)文章。

        相關評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
        推薦文章

        沒有數(shù)據(jù)