日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Windbg脚本和扩展工具开篇

發布時間:2025/3/21 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windbg脚本和扩展工具开篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

好長一段時間沒寫文章了,最近一直忙于為項目的可調式性做一些腳本和擴展工具,鑒于對windbg強大威力的震撼,以及相對較少的資料,筆者決定寫一系列關于如何開發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擴展比較復雜,而且通常需要花費更大的精力寫出同樣的功能,但是它帶來的一個好處就是你可以獲得更多的功能,你甚至可以通過這些擴展寫一個調試器,那么一個完整的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;
}

?

總結

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

總結

以上是生活随笔為你收集整理的Windbg脚本和扩展工具开篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。