![](/img/trans.png)
[英]How to view print messages in Windbg when Windbg is in local kernel debugging mode?
[英]How to break on the entry point of a program when debug in kernel mode with windbg?
我想在內核模式下調試程序,並且想破壞該程序的入口點,例如ollydbg
。 但是我不能用bp
破壞它,因為程序沒有啟動並且符號不能被加載。 我找到了一些方法來做,但是我認為不是很好。
1.中斷內核中的CreateProcess
函數。 但是我不知道應該確切地中斷哪個功能,我認為CreateProcess
和程序的入口之間還有很長的路要走。
2.使用cc
更改程序的入口點。 但是它需要其他工具,我應該在字節變回原處更改代碼。 我覺得這很煩人。
3.借助ollydbg
。 在用windbg調試的虛擬機中用ollydbg
調試程序。 我認為這不是一個好主意。
4.使用sxe ld
。 可以在<<Advanced Windows Debugging>>
Listing 3.29
中找到它。 我已經嘗試過,但發現它僅在第一次使用時有效。 而且我不知道休息后我該怎么辦。
5.使用bu
中斷輸入功能。 但是我也不知道我該怎么做。 例如,如何加載符號?
6.使用.create
。 我不知道我說的話是否正確。
我認為使用windbg
在內核模式下進行調試時,通常會中斷程序的入口,而使用強大的windbg
則必須有一種好的方法。 最好的方法是什么?
順便說一下,我想在內核模式下調試程序,因為我想獲得程序的令牌值。 我發現在用戶模式下,windbg可以使用!token
來識別令牌,但是我不知道如何在用戶模式下獲取令牌的值。 看來我只能在內核模式下獲得令牌的值,對還是錯?
您可以通過ntsd -d在目標中運行任何exe,以從主機中運行的內核模式調試器對其進行調試
假設您正在myhost中運行虛擬機mytarget
在myhost中安裝windbg
設置myhost viz srv * x:\\ xxxx * http:\\ xxxxxxxxxxxx的符號路徑
在主機中創建內核連接(選擇下面顯示的最好的是串行連接)
在mytarget中安裝windbg
打開共享文件夾z:\\指向myhost中的symbolcache文件夾,在mytarget中設置symbolpath指向共享文件夾,運行ntsd -d calc.exe
輸入提示時,kd將在calc.exe的$ exentry斷開
只要顯示輸入提示,您就像本地用戶模式調試器一樣使用kd,因此,如果您設置bp calc!Winmain並發出g kd,將在calc.exe winmain上中斷
進入kd會話使用.breakin
雜亂無章的東西,但是一旦習慣了就可以很好地工作(即記住文檔)
樣品運行
kd> g <-------------- kd session running in myhost
CommandLine: calc.exe
Symbol search path is: srv*z:\
*http://msdl.microsoft.com/download/symbols
ntdll!DbgBreakPoint:
7c90120e cc int 3
.sympath
NOTE: The symbol path for this ntsd is relative to where
ntsd.exe is running, not where kd.exe is running.
Symbol search path is: srv*z:\
*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: srv*z:\
*http://msdl.microsoft.com/download/symbols
.reload /f calc.exe
lm m calc
start end module name
01000000 0101f000 calc (pdb symbols) z:\calc.pdb\3B7D84101\calc.pdb
0:000> version <--------------------usermode session in kd via ntsd -d
version
Windows XP Version 2600 (Service Pack 3) UP Free x86 compatible
Live user mode: <Local>
command line: 'ntsd -d calc.exe' Debugger Process 0x3F8
? $exentry;? calc!WinmainCrtstartup
Evaluate expression: 16852085 = 01012475
Evaluate expression: 16852085 = 01012475
關於您的原始請求,我不確定您有興趣找到什么令牌
如果獲取exe的EPROCESS-> Token是唯一的要求,則不必運行任何kd會話
您可以使用本地內核調試會話(使用kd -kl或通過sysinternals使用livekd)獲取myhost中所有正在運行的進程的令牌。
這是一個簡單的腳本,使用上述技術獲取所有正在運行的進程的sid
:\>cat sid.txt
!for_each_process "r $t0 =(@@c++(((nt!_eprocess *) @#Process )->Token.Object)) &
@@(~7); r $t1 = @@c++(((nt!_token *) @$t0 )->UserAndGroups->Sid);!sid @$t1 1; ?
? (char *)((nt!_eprocess *) @#Process )->ImageFileName "
:\>kd -kl -c "$$>a< sid.txt;q"
結果
WARNING: Local kernel debugging requires booting with kernel
debugging support (/debug or bcdedit -debug on) to work optimally.
lkd> kd: Reading initial command '$$>a< sid.txt;q'
SID is: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)
char * 0x8ac729a4
"System"
SID is: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)
char * 0x8a35729c
"smss.exe"
SID is: S-1-5-20 (Well Known Group: NT AUTHORITY\NETWORK SERVICE)
char * 0x8a3619ac
"svchost.exe"
SID is: S-1-5-19 (Well Known Group: NT AUTHORITY\LOCAL SERVICE)
char * 0x8a36ef14
"svchost.exe"
SID is: S-1-5-21-602162358-1801674531-1417001333-1003 (User: XXXXXX\Admin)
char * 0x8a261b64
"explorer.exe"
使用Windbg幫助文件中描述的方法調試WinLogon。 將您的用戶模式應用替換為WinLogon:
Windbg | 幫助| 內容| Windows調試| 調試技術| 專門的調試技術| 調試WinLogon
IFEO將啟動您的用戶模式應用程序並附加ntsd.exe。 在ntsd.exe中,可以使用bu $exentry
然后使用g
繼續在圖像輸入上設置一個斷點。
在ntsd.exe進入用戶模式進程的任何時候,您都可以發出.breakin
命令以切換到內核模式調試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.