2019/12/11

Window 10 如何開機進Safe mode, Uefi, WinPE ? 什麼是WinRE?

首先要知道這個東西, Windows 修復環境 (Windows RE)
此畫面就是WinRE的環境, 常用於開機異常或開機進階選項, 微軟說明進入WinRE方法

WinRE為Vista版本開始有的修復功能, 官方說明: 「Windows 修復環境」 (WinRE) 是一種復原環境, 可以修復無法開機之作業系統的常見原因。 WinRE 是以 Windows 預先安裝環境 (Windows PE) 為基礎, 並可使用其他驅動程式、語言、Windows PE 選用元件和其他疑難排解和診斷工具進行自訂。

如何進winPE

其實微軟的邏輯還是一樣, 就是WinPE是一套小型的作業系統, 用以安裝與修復等功能
先進入WinRE之後, 選擇命令提示字元(command prompt)
會跳出X:\ 的partition的 command line 就是我們熟悉的WinPE介面囉!

指令WinPE裡關機: wpeutil shutdown
指令WinPE裡 重新啟動: wpeutil reboot

如何進safe mode安全模式

微軟Windows 2000/XP/Vista/7的安全模式可以透過在啟動時不斷按F8鍵進入。Windows 8以後的Windows作業系統預設無法通過F8進入安全模式。
方法一: 先進WinRE的畫面, 然後選 Startup settings

會看到這個畫面

重新開機之後,會看到選項清單。
選取 4 或按 F4 以在 [安全模式] 中啟動電腦。
選取 5 或按 F5 來使用 [安全模式 (含網路功能)]。

方法二: 透過 msconfig設定
使用這個方法要注意,是固定性的修改、而不是一次性的,所以如果沒有改回來,就會變成每次開機都是安全模式。

方法三: 透過 bcdedit 設定
使用這個方法要注意,是固定性的修改、而不是一次性的,所以如果沒有改回來,就會變成每次開機都是安全模式。
啟用安全模式 – 輸入:
bcdedit /set {default} safeboot minimal
啟用安全模式含網路功能 – 輸入:
bcdedit /set {default} safeboot network
關閉安全模式 – 輸入:
bcdedit /deletevalue {default} safeboot

2019/12/03

Windbg 指令與分析之教學筆記

追朔根源就是微軟的工具, 因此必須閱讀官方手冊:
1. 微軟教學:Debugging Tools for Windows (WinDbg, KD, CDB, NTSD)
2. 微軟教學: ACPI Debugging
3. 微軟教學: Getting Started with WinDbg (Kernel-Mode)
4. 微軟說明:debugger commands

有幾個系列的影片教學, 可以身歷其境的感受一下 windbg的強大, 分別是:
1. 影片教學: WinDbg Basics for Malware Analysis
2. 影片教學: Windows Kernel Programming Tutorials for Beginners

3. 教學 Remote debugging

4. 微軟教學影片: Debugging KMDF Drivers

!load wdfkd.dll   #載入Windows Driver Framework Extensions (Wdfkd.dll), 有更多好用的指令!chain        #列出所有已加載的debugger extension!wdfhelp      #ugger extension!wdfhelp      #幫助說明!wdflogdump   #顯示 WDF In-flight Recorder log records!wdfldr       #顯示目前bound to WDF的drivers資訊  !wdftmffile!wdfdriverinfo!wdfhandle!wdfobject!wdfdevice!wdfusbdevice!wdfopenhandles!wdfqueue!wdfreuest

其他在網路上的先進們分享知識的 Windbg專欄部落格:
1. hgy413的专栏windbg
2. 匠心十年: WinDbg 命令手册

或是特別說明一些其他技巧與步驟, 小軟體工具之類:
1. symbol: WinDbg 設定 symbol file path 的四種方法

先知道格式吧:
srv*{cache path}*{symbol server}

我的寫法填入Windbg GUI下拉的Sympol File Path:
srv*C:\Symbol*https://msdl.microsoft.com/download/symbols

2. symbol: 使用SymChk獲取符號文件
3. PDB: 你可能會想知道的關於 .PDB 檔的一些事
4. break point: WinDBG 技巧:设断点命令详解(bp, bu, bm, ba 以及bl, bc, bd, be)
5. BSOD情況分析: Trace BSOD with WinDbg
6. 如何進安全模式:幾種 Windows 10 進入安全模式的方法
因為有時候無法開機的原因,可能是系統中的某些驅動程式出了問題,或是在載入某些開機時要一起載入的程式,導致無法開機。而當我們選用安全模式啟動時,僅載入開機時最必要的檔案,其它多餘的檔案、驅動程式一律都不載入,因此如果無法進入Windows桌面是這方面問題所導致的,那麼用安全模式就應該可以順利排除問題,讓你可以進入Windows系統桌面。

7.什麼是SysWow64: SysWow64檔夾,是64位Windows用來存放32位元Windows系統檔的地方。
8.win10的快速啟動是什麼:win10電腦的「快速啟動」模式你知多少?
9.基本:9招解決 Windows 系統問題或故障,不用靠別人、自己來搞定

一些有用的工具:

1. 小軟體: BlueScreenview
2. 小軟體: Windows Repair
3. 小軟體: CCleaner
4. 微軟 Process explorer: 類似Windows「工作管理員」的程式,主要功能就是列出目前電腦中正在運行的全部程式以及跟運行中程式相關的全部詳細資料

5. 微軟 Process dump: 命令行工具, 它的主要目的是監控應用程序的CPU異常動向, 並在此異常時生成crash dump文件, 供研發人員和管理員確定問題發生的原因.你還可以把它作為生成dump的工具使用在其他的腳本中.ProcDump與Procexp一樣是Windows平台上的內部調試工具,Procexp採用圖形界面體現系統整體及個別進程的性能信息,而ProcDump則與我們在Unix平台上使用的性能分析工具類似使用CLI命令行界面。

6. 微軟 LiveKD:使用Microsoft內核調試器檢查系統。

Windbg 基本操作指令:

  • 開啟crash dump檔案路徑為 File > Open crash dump
  • 以下指令載入symbols:
  • .symfix C:\symbols: 設定local端的symbol目錄位置
  • .reload : 重載一次
  • .sympath : 顯示目前的symbol path

Windbg一般與幫助指令:

指令: ?
顯示說明基本的各種輸入常規指令

0:000> ?Open debugger.chm for complete debugger documentationB[C|D|E][] - clear/disable/enable breakpoint(s)BL - list breakpointsBA    - set processor breakpointBP 
- set soft breakpointD[type][] - dump memoryDT [-n|y] [[mod!]name] [[-n|y]fields] [address] [-l list] [-a[]|c|i|o|r[#]|v] - dump using type informationDV [] - dump local variablesDX [-r[#]] - display C++ expression using extension model (e.g.: NatVis)E[type]
[] - enter memory valuesG[H|N] [=
[
...]] - goK - stacktraceKP - stacktrace with source argumentsLM[k|l|u|v] - list modulesLN - list nearest symbolsP [=] [] - step overQ - quitR [[ [= ]]] - view or set registersS[] - search memorySX [{e|d|i|n} [-c "Cmd1"] [-c2 "Cmd2"] [-h] {Exception|Event|*}] - event filterT [=
] [] - trace intoU [] - unassembleversion - show debuggee and debugger versionX [<*|module>!]<*|symbol> - view symbols? - display expression?? - display C++ expression$< - take input from a command fileHit Enter... unary ops: + - not by wo dwo qwo poi hi low binary ops: + - * / mod(%) and(&) xor(^) or(|) comparisons: == (=) < > != operands: number in current radix, public symbol, : b (byte), w (word), d[s] (doubleword [with symbols]), a (ascii), c (dword and Char), u (unicode), l (list) f (float), D (double), s|S (ascii/unicode string) q (quadword) : [(nt | )!] ( can include ? and *) :
:
L User-mode options:~ - list threads status~#s - set default thread| - list processes status|#s - set default processx64 options:DG - dump selector : [r|e]ax, [r|e]bx, [r|e]cx, [r|e]dx, [r|e]si, [r|e]di, [r|e]bp, [r|e]sp, [r|e]ip, [e]fl, r8-r15 with b/w/d subregisters al, ah, bl, bh, cl, ch, dl, dh, cs, ds, es, fs, gs, ss sil, dil, bpl, spl dr0, dr1, dr2, dr3, dr6, dr7 fpcw, fpsw, fptw, st0-st7, mm0-mm7 xmm0-xmm15 : iopl, of, df, if, tf, sf, zf, af, pf, cf : #<16-bit protect-mode [seg:]address>, &Open debugger.chm for complete debugger documentation

指令: .help
說明系統指令
第一排還有快速連結個字母開頭的

0:000> .help  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z All. commands:   .allow_exec_cmds [0|1] - control execution commands   .allow_image_mapping [0|1] - control on-demand image file mapping   .apply_dbp [] - add current data breakpoint state to a                            register context   .asm [] - set disassembly options   .asm- [] - clear disassembly options   .attach  - attach to  at next execution   .block {  } - brackets a set of commands for nested execution   .break - break out of the enclosing loop   .cache [] - virtual memory cache control   .call (, , ...) - run a function in the debuggee   .catch {  } - catch failures in commands   .chain - list current extensions   .clients - list currently active clients   .continue - continue the enclosing loop   .copysym []  - copy current symbol files to a directory   .create  - create a new process   .createdir [] [] - control process creation options   .cxr 
- dump context record at specified address k* after this gives cxr stack .dbgdbg - attach a debugger to the current debugger .debug_sw_wow [0|1] - allow interaction with software WOW emulation .detach - detach from the current process/dump .dml_file - output DML content from file .dml_flow - show basic block code flow .dml_start [] - navigable overview of debugger activities .do { } () - execute until is zero .drivers - This command was removed -- use 'lm' or .reload -l) .dump [] - create a dump file on the host system .dumpcab [] - create a CAB for an open dump .dumpdebug - display detailed information about the dump file .dvalloc [] - VirtualAlloc memory in the debuggee .dvfree [] - VirtualFree memory in the debuggee .echo [""|] - echo string .echotime - output debugger time .echotimestamps [0|1] - toggle timestamp output on events .ecxr - dump context record for current exception .excr - dump context record for current exception .effmach [] - change current machine type .else { } - if/then/else conditional execution .elsif () { } [] - if/then/else conditional execution .enable_long_status [0|1] - dump LONG types in default base .enable_unicode [0|1] - dump USHORT array/pointers and unicode strings .endsrv - disable the given engine server .endpsrv - cause the current session's remote server to exit .enumtag - enumerate available tagged data .eventlog - display log of recent events .events - display and select available events .eventstr - display any event strings registered by debuggee .exepath [[;...]] - set executable search path .exepath+ [[;...]] - append executable search path .expr - control expression evaluator .exptr
- do .exr and .cxr for EXCEPTION_POINTERS .exr
- dump exception record at specified address .extmatch [] - display all extensions matching pattern .extpath [[;...]] - set extension search path .extpath+ [[;...]] - append extension search path .f+ - set current stack frame to caller of current frame .f- - set current stack frame to callee of current frame .fiber
- sets context of fiber at address resets context if no address specified .fiximports - attempts to link imports for images .fnent
- dump function entry for the given code address .fnret [] - display formatted return value .for ( ; ; ) { } - execute and until is zero .force_radix_output [0|1] - dump integer types in default base .force_system_init [] - force pending systems to initialize if possible .force_tb - forcibly allow branch tracing .foreach [opts] ( { } ) { } - execute for each token in the output of .fpo - control override FPO information .frame [] - set current stack frame for locals .formats - displays expression result in many formats .help [] - display this help .holdmem [range] - hold and compare memory data .if () { } [] - if/then/else conditional execution .ignore_missing_pages [0|1] - control kernel summary dump missing page error message .imgscan - scan memory for PE images .jdinfo [/u] - interpret AeDebug information .kframes - set default stack trace depth .lastevent - display the last event that occurred .leave - exit the enclosing .catch .lines - toggle line symbol loading .load - add this extension DLL to the extension chain .loadby - add the extension DLL in the module directory to the extension chain .locale [] - set the current locale .logfile - display log status .logopen [] - open new log file .logappend [] - append to log file .logclose - close log file .netsyms [0|1] - allow/disallow net symbol paths .netuse [] - manage net connections .noshell - disable shell commands .noversion - disable extension version checking .nvlist - display the set of .NATVIS files loaded into the debugger .nvload - load a .NATVIS file .nvunload - unload a .NATVIS file .nvunloadall - unload all .NATVIS files .ofilter - filter debuggee output against the given pattern .opendump - open a dump file .outmask - set bits in the current output mask .outmask- - clear bits in the current output mask .pcmd [] - control per-prompt command .pop [] - pop state .prefer_dml [0|1] - control DML mode default .printf "", - formatted output .process [
] - sets implicit process resets default if no address specified .process_info - display security related information of current process .prompt_allow [] - control what information can be displayed at the prompt .push [] - push state .quit_lock [] - locks session against unexpected quit .readmem - read raw memory from a file .record_branches [0|1] - controls recording of processor branching .reload [[=
,]] - reload symbols .restart - request a session restart .remote - start remote.exe server .secure [0|1] - disallow operations dangerous for the host .scriptlist - display the set of scripts loaded into the debugger .scriptload - load a script file .scriptproviders - display the set of script providers in the debugger .scriptunload - unload a script file .send_file - send files to remote server .server - start engine server .servers - list active remoting servers .setdll - debugger will search for extensions in this DLL first .settings - manage settings .shell [] - execute shell command .show_read_failures [] - control extra read failure output .show_sym_failures [] - control extra symbol failure output .sleep - debugger sleeps for given duration useful for allowing access to a machine that's broken in on an ntsd -d .srcfix [] - fix source search path .srcfix+ [] - append fixed source search path .srcnoisy [0|1] - control verbose source loading output .srcpath [[;...]] - set source search path .srcpath+ [[;...]] - append source search path .step_filter [] ["[;...]"] - Set symbol patterns to skip when stepping .symfix [] - fix symbol search path .symfix+ [] - append fixed symbol search path .symopt - set symbol options .symopt+ - set symbol options .symopt- - clear symbol options .sympath [[;...]] - set symbol search path .sympath+ [[;...]] - append symbol search path .thread [
] - sets context of thread at address resets default context if no address specified .time - displays session time information .timezone - display timezone information .ttime - displays thread time information .tlist - list running processes .typeopt - set/clear type options .unload - remove this extension DLL from the list of extension DLLs .unloadall - remove all extension DLLs from the list of extensions DLLs .wake - wake up a .sleep'ing debugger .while () { } - execute while is non-zero .writemem - write raw memory to a file .rrestart - register current session for Application Restart .urestart - unregister current session from Application Restart .inline - query the state whether debuggers should query inline functions .stackprovider - query the state whether debugger should query stack dump providers .stkwalk_force_frame_pointer - query or set the state whether debuggers should unwind stack solely based on frame pointer .hideinjectedcode [] - Hide injected calls from stepping in source mode .enablepackagedebug - Enable debugging for UWP application. .disablepackagedebug - Disable debugging for UWP application. .suspendpackage - Suspends a UWP application. .resumepackage - Resumes a UWP application. .querypackage - Displays the state of a UWP application. .querypackages - Lists all UWP applications and their state. .createpackageapp [] - Enables debugging and launches a UWP application. .terminatepackageapp - Terminates all processes for UWP application. .activatepackagebgtask - Enables debugging and launches a UWP background task.Use ".hh " or open debugger.chm in the debuggers directory to getdetailed documentation on a command.

指令:.chain
列出所有已加載的調試器擴展 (List Debugger Extensions)

0:000> .chainExtension DLL search Path:    C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\WINXP;C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\winext;C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\winext\arcade;C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\pri;C:\Program Files (x86)\Windows Kits\10\Debuggers\x86;C:\Program Files (x86)\Windows Kits\10\Debuggers\x86;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\WINDOWS\SysWOW64\WindowsPowerShell\v1.0\Modules\TShell\TShell\;C:\Program Files\Java\jdk1.8.0_45\bin;C:\Program Files\nodejs\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit\;C:\Users\Jamie\AppData\Local\Microsoft\WindowsApps;Extension DLL chain:    dbghelp: image 10.0.14321.1024, API 10.0.6, built Sat Jul 16 09:29:50 2016        [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\dbghelp.dll]    ext: image 10.0.14321.1024, API 1.0.0, built Sat Jul 16 09:29:44 2016        [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\winext\ext.dll]    exts: image 10.0.14321.1024, API 1.0.0, built Sat Jul 16 09:28:14 2016        [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\WINXP\exts.dll]    uext: image 10.0.14321.1024, API 1.0.0, built Sat Jul 16 09:28:11 2016        [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\winext\uext.dll]    ntsdexts: image 10.0.14393.33, API 1.0.0, built Thu Jul 28 13:23:56 2016        [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\WINXP\ntsdexts.dll]

指令: .extmatch
.extmatch /D /e XXXXX * 顯示由當前加載的與指定模式匹配的擴展DLL導出的擴展命令

0:000> .extmatch /D /e ntsdexts *!ntsdexts.critsec!ntsdexts.dp!ntsdexts.dreg!ntsdexts.dt!ntsdexts.gatom!ntsdexts.handle!ntsdexts.help!ntsdexts.hleak!ntsdexts.htrace!ntsdexts.locks!ntsdexts.runaway!ntsdexts.threadtoken0:000> .extmatch /D /e uext *!uext.evlog!uext.findstack!uext.handle!uext.help!uext.mapped_file!uext.runaway!uext.uniqstack!uext.vadump!uext.vprot

指令:.hh
打開 WinDbg 的幫助文件

指令: .restart
重新啟動被調試的應用程式(Restart Target Application)

指令: version
顯示調試器版本信息和已加載的調試器擴展

指令: vercommand
顯示調試器啟動文件的路徑

0:000> vercommandcommand line: '"C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\windbg.exe" '

指令: vertarget
顯示目標機器Microsoft Windows操作系统版本資訊

0:000> vertargetWindows 10 Version 14393 MP (4 procs) Free x64Product: WinNt, suite: SingleUserTSkernel32.dll version: 10.0.14393.2214 (rs1_release_1.180402-1758)Machine Name:Debug session time: Tue Dec 10 10:26:46.000 2019 (UTC + 8:00)System Uptime: 39 days 17:48:11.976Process Uptime: 39 days 17:45:01.000  Kernel time: 0 days 0:00:04.000  User time: 0 days 0:00:02.000

指令: .effmach
顯示目標機器的處理器模資訊
.effmach .
.effmach #
.effmach x86 | amd64 | ia64 | ebc

0:000> .effmachEffective machine: x64 (AMD64)

指令: .cls
清理螢幕

指令: .echo
輸出字串 e.g. .echo “Hello World”

指令: .time
顯示系統記錄的各種時間

組合鍵: ctrl+alt+v
能切換詳細模式的打開和關閉
打開詳細模式後,一些顯示命令會產生更詳細的輸出,發送給調試器的每個模塊加載操作都會被顯示出來
並且操作系統每次加載驅動或都DLL也會提示

Windbg 模塊Module加载命令

指令: lm
列出已載入模塊(List Loaded Modules)
lm: List modules
lmv: List module versions
lmvm: List specific module versions
lm m ModuleName

0:000> lmstart             end                 module name00000000`6a030000 00000000`6a0f9000   msvcr80    (deferred)             00000001`40000000 00000001`40016000   valWBFPolicyService   (deferred)             00007ffa`a9110000 00007ffa`a9171000   wevtapi    (deferred)             00007ffa`aab40000 00007ffa`aab68000   devobj     (deferred)             00007ffa`aada0000 00007ffa`aadf4000   mintdh     (deferred)             00007ffa`aae00000 00007ffa`aaeae000   tdh        (deferred)             00007ffa`ab940000 00007ffa`ab96b000   bcrypt     (deferred)             00007ffa`abde0000 00007ffa`abdf0000   msasn1     (deferred)             00007ffa`abdf0000 00007ffa`ac00d000   KERNELBASE   (pdb symbols)          c:\symbols\kernelbase.pdb\C1CB335438FC484B842D02CB20116D3A1\kernelbase.pdb00007ffa`ac010000 00007ffa`ac190000   gdi32full   (deferred)             00007ffa`ac190000 00007ffa`ac1ae000   win32u     (deferred)             00007ffa`ac1b0000 00007ffa`ac1f2000   cfgmgr32   (deferred)             00007ffa`ac8e0000 00007ffa`acaa9000   crypt32    (deferred)             00007ffa`acb60000 00007ffa`acc55000   ucrtbase   (deferred)             00007ffa`acc60000 00007ffa`accfc000   msvcp_win   (deferred)             00007ffa`acd60000 00007ffa`acdca000   bcryptPrimitives   (deferred)             00007ffa`ad120000 00007ffa`ad1df000   oleaut32   (deferred)             00007ffa`ad240000 00007ffa`ad508000   combase    (deferred)             00007ffa`ad5b0000 00007ffa`ad9d9000   setupapi   (deferred)             00007ffa`ad9e0000 00007ffa`adb01000   rpcrt4     (deferred)             00007ffa`adb10000 00007ffa`adb69000   sechost    (deferred)             00007ffa`adbe0000 00007ffa`adc14000   gdi32      (deferred)             00007ffa`adc20000 00007ffa`adcbe000   msvcrt     (deferred)             00007ffa`af330000 00007ffa`af3dc000   kernel32   (deferred)             00007ffa`af3e0000 00007ffa`af518000   ole32      (deferred)             00007ffa`af550000 00007ffa`af6b5000   user32     (deferred)             00007ffa`af6c0000 00007ffa`af762000   advapi32   (deferred)             00007ffa`af850000 00007ffa`af86c000   imagehlp   (deferred)             00007ffa`af870000 00007ffa`af878000   psapi      (deferred)             00007ffa`af8f0000 00007ffa`afac2000   ntdll      (pdb symbols)          c:\symbols\ntdll.pdb\3FED89B476364D33AA918AE74196DAF21\ntdll.pdb

指令: !dlls
列出所有加載的模塊和加載數量

0:000> !dlls This is Win8 with the loader DAG.0x00592920: C:\WINDOWS\system32\valWBFPolicyService.exe      Base   0x140000000  EntryPoint  0x140007710  Size        0x00016000    DdagNode     0x00592a50      Flags  0x000022cc  TlsIndex    0x00000000  LoadCount   0xffffffff    NodeRefCount 0x00000000                          LDRP_LOAD_NOTIFICATIONS_SENT             LDRP_IMAGE_DLL0x00592790: C:\WINDOWS\SYSTEM32\ntdll.dll      Base   0x7ffaaf8f0000  EntryPoint  0x00000000  Size        0x001d2000    DdagNode     0x005928c0      Flags  0x0000a2c4  TlsIndex    0x00000000  LoadCount   0xffffffff    NodeRefCount 0x00000000                          LDRP_IMAGE_DLL0x00592db0: C:\WINDOWS\System32\KERNEL32.DLL      Base   0x7ffaaf330000  EntryPoint  0x7ffaaf338400  Size        0x000ac000    DdagNode     0x00592ee0      Flags  0x000ca2cc  TlsIndex    0x00000000  LoadCount   0xffffffff    NodeRefCount 0x00000000                          LDRP_LOAD_NOTIFICATIONS_SENT             LDRP_IMAGE_DLL             LDRP_DONT_CALL_FOR_THREADS             LDRP_PROCESS_ATTACH_CALLED...

指令: !lmi
显示模块的详细信息,包括加载符号信息
!lmi Module

0:000> !lmi kernel32Loaded Module Info: [kernel32]          Module: kernel32   Base Address: 00007ffaaf330000     Image Name: kernel32.dll   Machine Type: 34404 (X64)     Time Stamp: 5ac2f8e6 Tue Apr  3 11:45:42 2018           Size: ac000       CheckSum: b4571Characteristics: 2022  Debug Data Dirs: Type  Size     VA  Pointer             CODEVIEW    25, 84b40,   83140 RSDS - GUID: {996833D4-6FC4-412D-A9DE-305E863A2B34}               Age: 1, Pdb: kernel32.pdb                   ??   4ec, 84b68,   83168 [Data not mapped]     Image Type: MEMORY   - Image read successfully from loaded memory.    Symbol Type: PDB      - Symbols loaded successfully from image header.                 c:\symbols\kernel32.pdb\996833D46FC4412DA9DE305E863A2B341\kernel32.pdb    Load Report: public symbols , not source indexed                  c:\symbols\kernel32.pdb\996833D46FC4412DA9DE305E863A2B341\kernel32.pdb

Windbg 符号Symbol加载命令

指令 ld
加載指定模塊的符號 (Load Symbols), 注意藥此symbol的module是已經載入, 若未載入就先lm該module吧 (範例參考:lm ld x)
ld * 加載所有模塊的符號

0:000> ld *Symbols already loaded for msvcr80Symbols already loaded for valWBFPolicyServiceSymbols already loaded for wevtapiSymbols already loaded for devobjSymbols already loaded for mintdhSymbols already loaded for tdhSymbols already loaded for bcryptSymbols already loaded for msasn1Symbols already loaded for KERNELBASESymbols already loaded for gdi32fullSymbols already loaded for win32uSymbols already loaded for cfgmgr32Symbols already loaded for crypt32Symbols already loaded for ucrtbaseSymbols already loaded for msvcp_winSymbols already loaded for bcryptPrimitivesSymbols already loaded for oleaut32Symbols already loaded for combaseSymbols already loaded for setupapiSymbols already loaded for rpcrt4Symbols already loaded for sechostSymbols already loaded for gdi32Symbols already loaded for msvcrtSymbols already loaded for kernel32Symbols already loaded for ole32Symbols already loaded for user32Symbols already loaded for advapi32Symbols already loaded for imagehlpSymbols already loaded for psapiSymbols already loaded for ntdll

指令 x
搜尋匹配的符号資訊(Examine Symbols)
x [Options] ModuleName!SymbolName 以!為界module與symbol
用法:
x *! 列出所有模块Module

0:000> x *!start             end                 module name00000000`6a030000 00000000`6a0f9000   msvcr80    (deferred)             00000001`40000000 00000001`40016000   valWBFPolicyService   (deferred)             00007ffa`a9110000 00007ffa`a9171000   wevtapi    (deferred)             00007ffa`aab40000 00007ffa`aab68000   devobj     (deferred)             00007ffa`aada0000 00007ffa`aadf4000   mintdh     (deferred)             00007ffa`aae00000 00007ffa`aaeae000   tdh        (deferred)             00007ffa`ab940000 00007ffa`ab96b000   bcrypt     (deferred)             00007ffa`abde0000 00007ffa`abdf0000   msasn1     (deferred)             00007ffa`abdf0000 00007ffa`ac00d000   KERNELBASE   (pdb symbols)          c:\symbols\kernelbase.pdb\C1CB335438FC484B842D02CB20116D3A1\kernelbase.pdb00007ffa`ac010000 00007ffa`ac190000   gdi32full   (deferred)             00007ffa`ac190000 00007ffa`ac1ae000   win32u     (deferred)             00007ffa`ac1b0000 00007ffa`ac1f2000   cfgmgr32   (deferred)             00007ffa`ac8e0000 00007ffa`acaa9000   crypt32    (deferred)             00007ffa`acb60000 00007ffa`acc55000   ucrtbase   (deferred)             00007ffa`acc60000 00007ffa`accfc000   msvcp_win   (deferred)             00007ffa`acd60000 00007ffa`acdca000   bcryptPrimitives   (deferred)             00007ffa`ad120000 00007ffa`ad1df000   oleaut32   (deferred)             00007ffa`ad240000 00007ffa`ad508000   combase    (deferred)             00007ffa`ad5b0000 00007ffa`ad9d9000   setupapi   (deferred)             00007ffa`ad9e0000 00007ffa`adb01000   rpcrt4     (deferred)             00007ffa`adb10000 00007ffa`adb69000   sechost    (deferred)             00007ffa`adbe0000 00007ffa`adc14000   gdi32      (deferred)             00007ffa`adc20000 00007ffa`adcbe000   msvcrt     (deferred)             00007ffa`af330000 00007ffa`af3dc000   kernel32   (deferred)             00007ffa`af3e0000 00007ffa`af518000   ole32      (deferred)             00007ffa`af550000 00007ffa`af6b5000   user32     (deferred)             00007ffa`af6c0000 00007ffa`af762000   advapi32   (deferred)             00007ffa`af850000 00007ffa`af86c000   imagehlp   (deferred)             00007ffa`af870000 00007ffa`af878000   psapi      (deferred)             00007ffa`af8f0000 00007ffa`afac2000   ntdll      (pdb symbols)          c:\symbols\ntdll.pdb\3FED89B476364D33AA918AE74196DAF21\ntdll.pdb

x ntdll!a* 列出 ntdll 模块底下所有a開頭的symbol

0:000> x ntdll!ap*00007ffa`af9648b4 ntdll!AppModelPolicy_GetPolicy (void)00007ffa`af917250 ntdll!ApiSetQueryApiSetPresence (void)00007ffa`afa0d3b0 ntdll!AppModelLibraryLoadFailureSystemBinary = 00007ffa`afa0d420 ntdll!AppModelLibraryLoadFailureApplicationBinary = 00007ffa`af91767c ntdll!ApiSetResolveToHost ()00007ffa`afa0d450 ntdll!AppModelRuntimeProviderId = 00007ffa`afa0d3e0 ntdll!AppModelGenericLibraryLoadFailureNoTermination = 00007ffa`af9177a0 ntdll!ApiSetpSearchForApiSet ()00007ffa`afa0d390 ntdll!AppModelLibraryLoadFailureNgenBinary = 00007ffa`af916b68 ntdll!ApiSetpSearchForApiSetHost ()

指令!sym
獲取符號加載狀態
!sym noisy 讓調試器顯示符號搜索詳細信息
!sym quiet 默認項,不顯示符號搜索信息

指令.sympath
顯示和設置符號搜索路徑
.sympath+ 增加符號搜索路徑
.sympath+ C:\Symbols

指令.symfix
設置符號庫路徑
.sym+ DownstreamStore 添加符號庫路徑

指令 .reload
重新加載符號信息

Windbg 異常分析指令:

指令: dump
.dump d:/test.dump
也就是說可以透過windbg來產生dump檔案
e.g.
產生完整Kernel Mode Dump :
.dump /f C:\memory.dmp

產生 user mode Dump:
.dump /m C:\memory.dmp

產生 User mode + 其他資訊:
.dump /mfh C:\memory.dmp

指令: !analyze
!analyze -v
顯示當前異常的詳細信息
e.g. !analyze –v d:\test.dump

!analyze -hang
診斷線程調用棧上是否有任何線程阻塞了其他線程

!analyze -f
查看異常分析信息,儘管調試器並未診斷出異常

指令: .lastevent
显示最近一次发生的异常或事件

指令: .load wow64exts
指令: !wow64exts.sw
從64位模式切換到了32位

指令: !locks
顯示目前 locks 鎖

指令: !qlocks
顯示目前 spinlock鎖

Windbg 關於memory的指令

指令dt (Display Type)
dt ntdll!*IMAGE* :查找有什麼Headers
以下例子是 notepad在memory查找出PE header的位址, 然後透過dt指令就可以查到定義的結構內容:

指令: .Dvalloc
讓 Windows 以分配到目標進程的更多memory。

指令: r
显示或修改寄存器、浮点寄存器、标志位、伪寄存器和预定义别名。直接用r,会显示当前线程的寄存器状态

指令: d*
显示给定范围memory的内容。
da ASCII 字符
db 字节值和ASCII字符

指令: e*
e命令和d命令非常相似,一個讀取一個寫入編輯
ea ASCII 字符串(不以NULL结尾)。
eb 字节值。

0:000> .dvalloc 100Allocated 1000 bytes starting at 000800000:000> ea 00080000 "i am ansi "0:000> db 00080000 00080000  69 20 61 6d 20 61 6e 73-69 20 00 00 00 00 00 00  i am ansi ...... 

指令u* :
命令显示指定的内存中的程序代码的反汇编。如果要反汇编某一个地址,直接用u命令加地址
ub 指示要反汇编的区域是向后计算的。
uf 命令显示内存中指定函数的反汇编代码。

指令x:
命令显示所有上下文中匹配指定模板的符号。可用字符通配符

指令: s (Search Memory)
搜索内存查找指定模板

指令: dt:
命令显示局部变量、全局变量或数据类型的信息。它也可以仅显示数据类型。即结构和联合(union)的信息
dt最方便处是查找结构体,查找结构体一定要使用dt,不要使用x
PE文件解析
1.dos头:
0:001> dt IMAGE_DOS_HEADER 01230000
2.nt头
e_lfanew定义了真正的PE文件头的相对偏移量RVA
0:001> da 01230000 +0n224
012300e0 “PE”
0:001> dt IMAGE_NT_HEADERS 01230000 +0n224
3.文件头
0:001> dt IMAGE_FILE_HEADER 01230000 +0n224+0x4
4.扩展文件头
0:001> dt _IMAGE_OPTIONAL_HEADER 01230000 +0n224+0x18

指令: dh
!dh 擴展顯示指定映像的頭部。

指令:!address
顯示整個地址空間和使用摘要的信息

0:000> !address     Mapping file section regions...Mapping module regions...Mapping PEB regions...Mapping TEB and stack regions...Mapping heap regions...Mapping page heap regions...Mapping other regions...Mapping stack trace database regions...Mapping activation context regions...        BaseAddress      EndAddress+1        RegionSize     Type       State                 Protect             Usage--------------------------------------------------------------------------------------------------------------------------+        0`00000000        0`00010000        0`00010000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`00010000        0`00020000        0`00010000 MEM_MAPPED  MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 1; Handle: 0000000000010000; Type: Segment]+        0`00020000        0`00021000        0`00001000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                        [............NSDS]+        0`00021000        0`00030000        0`0000f000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`00030000        0`00046000        0`00016000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                      Other      [API Set Map]+        0`00046000        0`00050000        0`0000a000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`00050000        0`00143000        0`000f3000 MEM_PRIVATE MEM_RESERVE                                    Stack      [~0; b60.b64]         0`00143000        0`00146000        0`00003000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE|PAGE_GUARD          Stack      [~0; b60.b64]         0`00146000        0`00150000        0`0000a000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Stack      [~0; b60.b64]+        0`00150000        0`00154000        0`00004000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                      Other      [System Default Activation Context Data]+        0`00154000        0`00160000        0`0000c000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`00160000        0`00161000        0`00001000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                      Other      [Activation Context Data]+        0`00161000        0`00170000        0`0000f000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`00170000        0`00172000        0`00002000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                       [................]+        0`00172000        0`00180000        0`0000e000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`00180000        0`00183000        0`00003000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 0; Handle: 0000000000590000; Type: Front End]         0`00183000        0`0019a000        0`00017000 MEM_PRIVATE MEM_RESERVE                                    Heap       [ID: 0; Handle: 0000000000590000; Type: Front End]+        0`0019a000        0`001a0000        0`00006000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`001a0000        0`001a1000        0`00001000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 2; Handle: 0000000000860000; Type: Front End]         0`001a1000        0`001ba000        0`00019000 MEM_PRIVATE MEM_RESERVE                                    Heap       [ID: 2; Handle: 0000000000860000; Type: Front End]+        0`001ba000        0`001c0000        0`00006000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`001c0000        0`001c1000        0`00001000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                       [................]+        0`001c1000        0`001d0000        0`0000f000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`001d0000        0`001d1000        0`00001000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                       [................]+        0`001d1000        0`001e0000        0`0000f000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`001e0000        0`001e5000        0`00005000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                       [................]+        0`001e5000        0`001f0000        0`0000b000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`001f0000        0`001f4000        0`00004000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                        [RESCDIR.........]+        0`001f4000        0`00200000        0`0000c000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`00200000        0`003be000        0`001be000 MEM_PRIVATE MEM_RESERVE                                               0`003be000        0`003bf000        0`00001000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     PEB        [b60]         0`003bf000        0`003c1000        0`00002000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     TEB        [~0; b60.b64]         0`003c1000        0`003c5000        0`00004000 MEM_PRIVATE MEM_RESERVE                                               0`003c5000        0`003c7000        0`00002000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     TEB        [~1; b60.dc4]         0`003c7000        0`003c9000        0`00002000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     TEB        [~2; b60.e28]         0`003c9000        0`003cb000        0`00002000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     TEB        [~3; b60.e2c]         0`003cb000        0`00400000        0`00035000 MEM_PRIVATE MEM_RESERVE                                      +        0`00400000        0`004c1000        0`000c1000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                        [................]+        0`004c1000        0`004d0000        0`0000f000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`004d0000        0`004ed000        0`0001d000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                        [..........0.5...]         0`004ed000        0`00590000        0`000a3000 MEM_MAPPED  MEM_RESERVE                                      +        0`00590000        0`0068f000        0`000ff000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 0; Handle: 0000000000590000; Type: Segment]         0`0068f000        0`00690000        0`00001000 MEM_PRIVATE MEM_RESERVE                                      +        0`00690000        0`006b0000        0`00020000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                       [................]+        0`006b0000        0`006b3000        0`00003000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                        [MZ..............]+        0`006b3000        0`00790000        0`000dd000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`00790000        0`00791000        0`00001000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 3; Handle: 0000000000cc0000; Type: Front End]         0`00791000        0`007aa000        0`00019000 MEM_PRIVATE MEM_RESERVE                                    Heap       [ID: 3; Handle: 0000000000cc0000; Type: Front End]+        0`007aa000        0`007d0000        0`00026000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`007d0000        0`007d1000        0`00001000 MEM_MAPPED  MEM_COMMIT  PAGE_READWRITE                       [RESCHIT.........]+        0`007d1000        0`00860000        0`0008f000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`00860000        0`00867000        0`00007000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 2; Handle: 0000000000860000; Type: Segment]         0`00867000        0`0086a000        0`00003000 MEM_PRIVATE MEM_RESERVE                                    Heap       [ID: 2; Handle: 0000000000860000; Type: Segment]         0`0086a000        0`0086f000        0`00005000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 2; Handle: 0000000000860000; Type: Segment]         0`0086f000        0`00870000        0`00001000 MEM_PRIVATE MEM_RESERVE                                      +        0`00870000        0`00872000        0`00002000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                        [................]         0`00872000        0`009f0000        0`0017e000 MEM_MAPPED  MEM_RESERVE                                               0`009f0000        0`009f5000        0`00005000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                        [............H...]         0`009f5000        0`009f8000        0`00003000 MEM_MAPPED  MEM_RESERVE                                      +        0`009f8000        0`00a00000        0`00008000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`00a00000        0`00b81000        0`00181000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                      Other      [GDI Shared Handle Table]+        0`00b81000        0`00cc0000        0`0013f000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`00cc0000        0`00ccf000        0`0000f000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 3; Handle: 0000000000cc0000; Type: Segment]         0`00ccf000        0`00cd0000        0`00001000 MEM_PRIVATE MEM_RESERVE                                      +        0`00cd0000        0`00dca000        0`000fa000 MEM_PRIVATE MEM_RESERVE                                    Stack      [~1; b60.dc4]         0`00dca000        0`00dcd000        0`00003000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE|PAGE_GUARD          Stack      [~1; b60.dc4]         0`00dcd000        0`00dd0000        0`00003000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Stack      [~1; b60.dc4]+        0`00dd0000        0`00dfd000        0`0002d000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 3; Handle: 0000000000cc0000; Type: Segment]         0`00dfd000        0`00ecf000        0`000d2000 MEM_PRIVATE MEM_RESERVE                                    Heap       [ID: 3; Handle: 0000000000cc0000; Type: Segment]         0`00ecf000        0`00ed0000        0`00001000 MEM_PRIVATE MEM_RESERVE                                      +        0`00ed0000        0`00fca000        0`000fa000 MEM_PRIVATE MEM_RESERVE                                    Stack      [~2; b60.e28]         0`00fca000        0`00fcd000        0`00003000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE|PAGE_GUARD          Stack      [~2; b60.e28]         0`00fcd000        0`00fd0000        0`00003000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Stack      [~2; b60.e28]+        0`00fd0000        0`010cb000        0`000fb000 MEM_PRIVATE MEM_RESERVE                                    Stack      [~3; b60.e2c]         0`010cb000        0`010ce000        0`00003000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE|PAGE_GUARD          Stack      [~3; b60.e2c]         0`010ce000        0`010d0000        0`00002000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Stack      [~3; b60.e2c]+        0`010d0000        0`01280000        0`001b0000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`01280000        0`012da000        0`0005a000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 2; Handle: 0000000000860000; Type: Segment]         0`012da000        0`0137f000        0`000a5000 MEM_PRIVATE MEM_RESERVE                                    Heap       [ID: 2; Handle: 0000000000860000; Type: Segment]         0`0137f000        0`01380000        0`00001000 MEM_PRIVATE MEM_RESERVE                                      +        0`01380000        0`0177f000        0`003ff000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                        [RESCSEG.........]+        0`0177f000        0`01780000        0`00001000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`01780000        0`0197f000        0`001ff000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 0; Handle: 0000000000590000; Type: Segment]         0`0197f000        0`01980000        0`00001000 MEM_PRIVATE MEM_RESERVE                                      +        0`01980000        0`019f0000        0`00070000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`019f0000        0`01aef000        0`000ff000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 0; Handle: 0000000000590000; Type: Segment]         0`01aef000        0`01af0000        0`00001000 MEM_PRIVATE MEM_RESERVE                                      +        0`01af0000        0`01e84000        0`00394000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                        [RESCSEG.........]+        0`01e84000        0`01e90000        0`0000c000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`01e90000        0`01ea6000        0`00016000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Heap       [ID: 0; Handle: 0000000000590000; Type: Segment]         0`01ea6000        0`0228f000        0`003e9000 MEM_PRIVATE MEM_RESERVE                                    Heap       [ID: 0; Handle: 0000000000590000; Type: Segment]         0`0228f000        0`02290000        0`00001000 MEM_PRIVATE MEM_RESERVE                                      +        0`02290000        0`6a030000        0`67da0000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`6a030000        0`6a031000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msvcr80; "C:\Windows\WinSxS\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.9268_none_88e0de612fadfb38\msvcr80.dll"]         0`6a031000        0`6a0cd000        0`0009c000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [msvcr80; "C:\Windows\WinSxS\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.9268_none_88e0de612fadfb38\msvcr80.dll"]         0`6a0cd000        0`6a0e9000        0`0001c000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msvcr80; "C:\Windows\WinSxS\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.9268_none_88e0de612fadfb38\msvcr80.dll"]         0`6a0e9000        0`6a0ee000        0`00005000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [msvcr80; "C:\Windows\WinSxS\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.9268_none_88e0de612fadfb38\msvcr80.dll"]         0`6a0ee000        0`6a0ef000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [msvcr80; "C:\Windows\WinSxS\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.9268_none_88e0de612fadfb38\msvcr80.dll"]         0`6a0ef000        0`6a0f9000        0`0000a000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msvcr80; "C:\Windows\WinSxS\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.9268_none_88e0de612fadfb38\msvcr80.dll"]+        0`6a0f9000        0`7ffe0000        0`15ee7000             MEM_FREE    PAGE_NOACCESS                      Free       +        0`7ffe0000        0`7ffe1000        0`00001000 MEM_PRIVATE MEM_COMMIT  PAGE_READONLY                      Other      [User Shared Data]         0`7ffe1000        0`7fff0000        0`0000f000 MEM_PRIVATE MEM_RESERVE                                      +        0`7fff0000        1`40000000        0`c0010000             MEM_FREE    PAGE_NOACCESS                      Free       +        1`40000000        1`40001000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [valWBFPolicyService; "C:\Windows\System32\valWBFPolicyService.exe"]         1`40001000        1`4000b000        0`0000a000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [valWBFPolicyService; "C:\Windows\System32\valWBFPolicyService.exe"]         1`4000b000        1`40011000        0`00006000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [valWBFPolicyService; "C:\Windows\System32\valWBFPolicyService.exe"]         1`40011000        1`40012000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [valWBFPolicyService; "C:\Windows\System32\valWBFPolicyService.exe"]         1`40012000        1`40013000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [valWBFPolicyService; "C:\Windows\System32\valWBFPolicyService.exe"]         1`40013000        1`40015000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [valWBFPolicyService; "C:\Windows\System32\valWBFPolicyService.exe"]         1`40015000        1`40016000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [valWBFPolicyService; "C:\Windows\System32\valWBFPolicyService.exe"]+        1`40016000     7ff5`ffec0000     7ff4`bfeaa000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ff5`ffec0000     7ff5`ffec5000        0`00005000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                      Other      [Read Only Shared Memory]      7ff5`ffec5000     7ff5`fffc0000        0`000fb000 MEM_MAPPED  MEM_RESERVE                                      +     7ff5`fffc0000     7ff5`ffff3000        0`00033000 MEM_MAPPED  MEM_COMMIT  PAGE_READONLY                      Other      [NLS Tables]+     7ff5`ffff3000     7ffa`a9110000        4`a911d000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`a9110000     7ffa`a9111000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [wevtapi; "C:\Windows\System32\wevtapi.dll"]      7ffa`a9111000     7ffa`a914f000        0`0003e000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [wevtapi; "C:\Windows\System32\wevtapi.dll"]      7ffa`a914f000     7ffa`a9168000        0`00019000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [wevtapi; "C:\Windows\System32\wevtapi.dll"]      7ffa`a9168000     7ffa`a9169000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [wevtapi; "C:\Windows\System32\wevtapi.dll"]      7ffa`a9169000     7ffa`a9171000        0`00008000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [wevtapi; "C:\Windows\System32\wevtapi.dll"]+     7ffa`a9171000     7ffa`aab40000        0`019cf000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`aab40000     7ffa`aab41000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [devobj; "C:\Windows\System32\devobj.dll"]      7ffa`aab41000     7ffa`aab59000        0`00018000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [devobj; "C:\Windows\System32\devobj.dll"]      7ffa`aab59000     7ffa`aab62000        0`00009000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [devobj; "C:\Windows\System32\devobj.dll"]      7ffa`aab62000     7ffa`aab63000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [devobj; "C:\Windows\System32\devobj.dll"]      7ffa`aab63000     7ffa`aab68000        0`00005000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [devobj; "C:\Windows\System32\devobj.dll"]+     7ffa`aab68000     7ffa`aada0000        0`00238000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`aada0000     7ffa`aada1000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [mintdh; "C:\Windows\System32\mintdh.dll"]      7ffa`aada1000     7ffa`aadd9000        0`00038000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [mintdh; "C:\Windows\System32\mintdh.dll"]      7ffa`aadd9000     7ffa`aaded000        0`00014000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [mintdh; "C:\Windows\System32\mintdh.dll"]      7ffa`aaded000     7ffa`aadee000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [mintdh; "C:\Windows\System32\mintdh.dll"]      7ffa`aadee000     7ffa`aadf4000        0`00006000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [mintdh; "C:\Windows\System32\mintdh.dll"]+     7ffa`aadf4000     7ffa`aae00000        0`0000c000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`aae00000     7ffa`aae01000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [tdh; "C:\Windows\System32\tdh.dll"]      7ffa`aae01000     7ffa`aae1a000        0`00019000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [tdh; "C:\Windows\System32\tdh.dll"]      7ffa`aae1a000     7ffa`aae75000        0`0005b000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [tdh; "C:\Windows\System32\tdh.dll"]      7ffa`aae75000     7ffa`aae76000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [tdh; "C:\Windows\System32\tdh.dll"]      7ffa`aae76000     7ffa`aaea0000        0`0002a000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [tdh; "C:\Windows\System32\tdh.dll"]      7ffa`aaea0000     7ffa`aaea2000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [tdh; "C:\Windows\System32\tdh.dll"]      7ffa`aaea2000     7ffa`aaea5000        0`00003000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [tdh; "C:\Windows\System32\tdh.dll"]      7ffa`aaea5000     7ffa`aaeae000        0`00009000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [tdh; "C:\Windows\System32\tdh.dll"]+     7ffa`aaeae000     7ffa`ab940000        0`00a92000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`ab940000     7ffa`ab941000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [bcrypt; "C:\Windows\System32\bcrypt.dll"]      7ffa`ab941000     7ffa`ab960000        0`0001f000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [bcrypt; "C:\Windows\System32\bcrypt.dll"]      7ffa`ab960000     7ffa`ab966000        0`00006000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [bcrypt; "C:\Windows\System32\bcrypt.dll"]      7ffa`ab966000     7ffa`ab967000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [bcrypt; "C:\Windows\System32\bcrypt.dll"]      7ffa`ab967000     7ffa`ab96b000        0`00004000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [bcrypt; "C:\Windows\System32\bcrypt.dll"]+     7ffa`ab96b000     7ffa`abde0000        0`00475000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`abde0000     7ffa`abde1000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msasn1; "C:\Windows\System32\msasn1.dll"]      7ffa`abde1000     7ffa`abde9000        0`00008000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [msasn1; "C:\Windows\System32\msasn1.dll"]      7ffa`abde9000     7ffa`abdec000        0`00003000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msasn1; "C:\Windows\System32\msasn1.dll"]      7ffa`abdec000     7ffa`abded000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [msasn1; "C:\Windows\System32\msasn1.dll"]      7ffa`abded000     7ffa`abdf0000        0`00003000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msasn1; "C:\Windows\System32\msasn1.dll"]+     7ffa`abdf0000     7ffa`abdf1000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [KERNELBASE; "C:\Windows\System32\KERNELBASE.dll"]      7ffa`abdf1000     7ffa`abec1000        0`000d0000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [KERNELBASE; "C:\Windows\System32\KERNELBASE.dll"]      7ffa`abec1000     7ffa`abfde000        0`0011d000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [KERNELBASE; "C:\Windows\System32\KERNELBASE.dll"]      7ffa`abfde000     7ffa`abfe2000        0`00004000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [KERNELBASE; "C:\Windows\System32\KERNELBASE.dll"]      7ffa`abfe2000     7ffa`abfe3000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [KERNELBASE; "C:\Windows\System32\KERNELBASE.dll"]      7ffa`abfe3000     7ffa`ac00d000        0`0002a000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [KERNELBASE; "C:\Windows\System32\KERNELBASE.dll"]+     7ffa`ac00d000     7ffa`ac010000        0`00003000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`ac010000     7ffa`ac011000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [gdi32full; "C:\Windows\System32\gdi32full.dll"]      7ffa`ac011000     7ffa`ac0cf000        0`000be000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [gdi32full; "C:\Windows\System32\gdi32full.dll"]      7ffa`ac0cf000     7ffa`ac170000        0`000a1000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [gdi32full; "C:\Windows\System32\gdi32full.dll"]      7ffa`ac170000     7ffa`ac174000        0`00004000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [gdi32full; "C:\Windows\System32\gdi32full.dll"]      7ffa`ac174000     7ffa`ac190000        0`0001c000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [gdi32full; "C:\Windows\System32\gdi32full.dll"]+     7ffa`ac190000     7ffa`ac191000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [win32u; "C:\Windows\System32\win32u.dll"]      7ffa`ac191000     7ffa`ac19a000        0`00009000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [win32u; "C:\Windows\System32\win32u.dll"]      7ffa`ac19a000     7ffa`ac1a7000        0`0000d000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [win32u; "C:\Windows\System32\win32u.dll"]      7ffa`ac1a7000     7ffa`ac1a8000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [win32u; "C:\Windows\System32\win32u.dll"]      7ffa`ac1a8000     7ffa`ac1ae000        0`00006000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [win32u; "C:\Windows\System32\win32u.dll"]+     7ffa`ac1ae000     7ffa`ac1b0000        0`00002000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`ac1b0000     7ffa`ac1b1000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [cfgmgr32; "C:\Windows\System32\cfgmgr32.dll"]      7ffa`ac1b1000     7ffa`ac1de000        0`0002d000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [cfgmgr32; "C:\Windows\System32\cfgmgr32.dll"]      7ffa`ac1de000     7ffa`ac1eb000        0`0000d000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [cfgmgr32; "C:\Windows\System32\cfgmgr32.dll"]      7ffa`ac1eb000     7ffa`ac1ec000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [cfgmgr32; "C:\Windows\System32\cfgmgr32.dll"]      7ffa`ac1ec000     7ffa`ac1f2000        0`00006000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [cfgmgr32; "C:\Windows\System32\cfgmgr32.dll"]+     7ffa`ac1f2000     7ffa`ac8e0000        0`006ee000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`ac8e0000     7ffa`ac8e1000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [crypt32; "C:\Windows\System32\crypt32.dll"]      7ffa`ac8e1000     7ffa`ac9d7000        0`000f6000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [crypt32; "C:\Windows\System32\crypt32.dll"]      7ffa`ac9d7000     7ffa`aca0e000        0`00037000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [crypt32; "C:\Windows\System32\crypt32.dll"]      7ffa`aca0e000     7ffa`aca15000        0`00007000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [crypt32; "C:\Windows\System32\crypt32.dll"]      7ffa`aca15000     7ffa`acaa9000        0`00094000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [crypt32; "C:\Windows\System32\crypt32.dll"]+     7ffa`acaa9000     7ffa`acb60000        0`000b7000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`acb60000     7ffa`acb61000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [ucrtbase; "C:\Windows\System32\ucrtbase.dll"]      7ffa`acb61000     7ffa`acc0c000        0`000ab000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [ucrtbase; "C:\Windows\System32\ucrtbase.dll"]      7ffa`acc0c000     7ffa`acc45000        0`00039000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [ucrtbase; "C:\Windows\System32\ucrtbase.dll"]      7ffa`acc45000     7ffa`acc48000        0`00003000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [ucrtbase; "C:\Windows\System32\ucrtbase.dll"]      7ffa`acc48000     7ffa`acc55000        0`0000d000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [ucrtbase; "C:\Windows\System32\ucrtbase.dll"]+     7ffa`acc55000     7ffa`acc60000        0`0000b000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`acc60000     7ffa`acc61000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msvcp_win; "C:\Windows\System32\msvcp_win.dll"]      7ffa`acc61000     7ffa`accb2000        0`00051000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [msvcp_win; "C:\Windows\System32\msvcp_win.dll"]      7ffa`accb2000     7ffa`accf1000        0`0003f000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msvcp_win; "C:\Windows\System32\msvcp_win.dll"]      7ffa`accf1000     7ffa`accf2000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [msvcp_win; "C:\Windows\System32\msvcp_win.dll"]      7ffa`accf2000     7ffa`accf5000        0`00003000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [msvcp_win; "C:\Windows\System32\msvcp_win.dll"]      7ffa`accf5000     7ffa`accfc000        0`00007000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msvcp_win; "C:\Windows\System32\msvcp_win.dll"]+     7ffa`accfc000     7ffa`acd60000        0`00064000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`acd60000     7ffa`acd61000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [bcryptPrimitives; "C:\Windows\System32\bcryptPrimitives.dll"]      7ffa`acd61000     7ffa`acdb1000        0`00050000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [bcryptPrimitives; "C:\Windows\System32\bcryptPrimitives.dll"]      7ffa`acdb1000     7ffa`acdc4000        0`00013000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [bcryptPrimitives; "C:\Windows\System32\bcryptPrimitives.dll"]      7ffa`acdc4000     7ffa`acdc5000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [bcryptPrimitives; "C:\Windows\System32\bcryptPrimitives.dll"]      7ffa`acdc5000     7ffa`acdca000        0`00005000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [bcryptPrimitives; "C:\Windows\System32\bcryptPrimitives.dll"]+     7ffa`acdca000     7ffa`ad120000        0`00356000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`ad120000     7ffa`ad121000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [oleaut32; "C:\Windows\System32\oleaut32.dll"]      7ffa`ad121000     7ffa`ad1a9000        0`00088000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [oleaut32; "C:\Windows\System32\oleaut32.dll"]      7ffa`ad1a9000     7ffa`ad1ce000        0`00025000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [oleaut32; "C:\Windows\System32\oleaut32.dll"]      7ffa`ad1ce000     7ffa`ad1d1000        0`00003000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [oleaut32; "C:\Windows\System32\oleaut32.dll"]      7ffa`ad1d1000     7ffa`ad1df000        0`0000e000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [oleaut32; "C:\Windows\System32\oleaut32.dll"]+     7ffa`ad1df000     7ffa`ad240000        0`00061000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`ad240000     7ffa`ad241000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [combase; "C:\Windows\System32\combase.dll"]      7ffa`ad241000     7ffa`ad409000        0`001c8000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [combase; "C:\Windows\System32\combase.dll"]      7ffa`ad409000     7ffa`ad4be000        0`000b5000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [combase; "C:\Windows\System32\combase.dll"]      7ffa`ad4be000     7ffa`ad4bf000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [combase; "C:\Windows\System32\combase.dll"]      7ffa`ad4bf000     7ffa`ad4c0000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [combase; "C:\Windows\System32\combase.dll"]      7ffa`ad4c0000     7ffa`ad4c3000        0`00003000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [combase; "C:\Windows\System32\combase.dll"]      7ffa`ad4c3000     7ffa`ad4c4000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [combase; "C:\Windows\System32\combase.dll"]      7ffa`ad4c4000     7ffa`ad508000        0`00044000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [combase; "C:\Windows\System32\combase.dll"]+     7ffa`ad508000     7ffa`ad5b0000        0`000a8000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`ad5b0000     7ffa`ad5b1000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [setupapi; "C:\Windows\System32\setupapi.dll"]      7ffa`ad5b1000     7ffa`ad65e000        0`000ad000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [setupapi; "C:\Windows\System32\setupapi.dll"]      7ffa`ad65e000     7ffa`ad68c000        0`0002e000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [setupapi; "C:\Windows\System32\setupapi.dll"]      7ffa`ad68c000     7ffa`ad68d000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [setupapi; "C:\Windows\System32\setupapi.dll"]      7ffa`ad68d000     7ffa`ad68e000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [setupapi; "C:\Windows\System32\setupapi.dll"]      7ffa`ad68e000     7ffa`ad9d9000        0`0034b000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [setupapi; "C:\Windows\System32\setupapi.dll"]+     7ffa`ad9d9000     7ffa`ad9e0000        0`00007000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`ad9e0000     7ffa`ad9e1000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [rpcrt4; "C:\Windows\System32\rpcrt4.dll"]      7ffa`ad9e1000     7ffa`adac0000        0`000df000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [rpcrt4; "C:\Windows\System32\rpcrt4.dll"]      7ffa`adac0000     7ffa`adaea000        0`0002a000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [rpcrt4; "C:\Windows\System32\rpcrt4.dll"]      7ffa`adaea000     7ffa`adaec000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [rpcrt4; "C:\Windows\System32\rpcrt4.dll"]      7ffa`adaec000     7ffa`adb01000        0`00015000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [rpcrt4; "C:\Windows\System32\rpcrt4.dll"]+     7ffa`adb01000     7ffa`adb10000        0`0000f000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`adb10000     7ffa`adb11000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [sechost; "C:\Windows\System32\sechost.dll"]      7ffa`adb11000     7ffa`adb42000        0`00031000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [sechost; "C:\Windows\System32\sechost.dll"]      7ffa`adb42000     7ffa`adb60000        0`0001e000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [sechost; "C:\Windows\System32\sechost.dll"]      7ffa`adb60000     7ffa`adb61000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [sechost; "C:\Windows\System32\sechost.dll"]      7ffa`adb61000     7ffa`adb62000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [sechost; "C:\Windows\System32\sechost.dll"]      7ffa`adb62000     7ffa`adb63000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [sechost; "C:\Windows\System32\sechost.dll"]      7ffa`adb63000     7ffa`adb69000        0`00006000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [sechost; "C:\Windows\System32\sechost.dll"]+     7ffa`adb69000     7ffa`adbe0000        0`00077000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`adbe0000     7ffa`adbe1000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [gdi32; "C:\Windows\System32\gdi32.dll"]      7ffa`adbe1000     7ffa`adbf3000        0`00012000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [gdi32; "C:\Windows\System32\gdi32.dll"]      7ffa`adbf3000     7ffa`adc0e000        0`0001b000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [gdi32; "C:\Windows\System32\gdi32.dll"]      7ffa`adc0e000     7ffa`adc0f000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [gdi32; "C:\Windows\System32\gdi32.dll"]      7ffa`adc0f000     7ffa`adc14000        0`00005000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [gdi32; "C:\Windows\System32\gdi32.dll"]+     7ffa`adc14000     7ffa`adc20000        0`0000c000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`adc20000     7ffa`adc21000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msvcrt; "C:\Windows\System32\msvcrt.dll"]      7ffa`adc21000     7ffa`adc96000        0`00075000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [msvcrt; "C:\Windows\System32\msvcrt.dll"]      7ffa`adc96000     7ffa`adcaf000        0`00019000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msvcrt; "C:\Windows\System32\msvcrt.dll"]      7ffa`adcaf000     7ffa`adcb1000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [msvcrt; "C:\Windows\System32\msvcrt.dll"]      7ffa`adcb1000     7ffa`adcb4000        0`00003000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [msvcrt; "C:\Windows\System32\msvcrt.dll"]      7ffa`adcb4000     7ffa`adcb6000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [msvcrt; "C:\Windows\System32\msvcrt.dll"]      7ffa`adcb6000     7ffa`adcb7000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [msvcrt; "C:\Windows\System32\msvcrt.dll"]      7ffa`adcb7000     7ffa`adcbe000        0`00007000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [msvcrt; "C:\Windows\System32\msvcrt.dll"]+     7ffa`adcbe000     7ffa`af330000        0`01672000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`af330000     7ffa`af331000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [kernel32; "C:\Windows\System32\kernel32.dll"]      7ffa`af331000     7ffa`af3a4000        0`00073000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [kernel32; "C:\Windows\System32\kernel32.dll"]      7ffa`af3a4000     7ffa`af3d3000        0`0002f000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [kernel32; "C:\Windows\System32\kernel32.dll"]      7ffa`af3d3000     7ffa`af3d4000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [kernel32; "C:\Windows\System32\kernel32.dll"]      7ffa`af3d4000     7ffa`af3dc000        0`00008000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [kernel32; "C:\Windows\System32\kernel32.dll"]+     7ffa`af3dc000     7ffa`af3e0000        0`00004000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`af3e0000     7ffa`af3e1000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [ole32; "C:\Windows\System32\ole32.dll"]      7ffa`af3e1000     7ffa`af497000        0`000b6000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [ole32; "C:\Windows\System32\ole32.dll"]      7ffa`af497000     7ffa`af4ee000        0`00057000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [ole32; "C:\Windows\System32\ole32.dll"]      7ffa`af4ee000     7ffa`af4f0000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [ole32; "C:\Windows\System32\ole32.dll"]      7ffa`af4f0000     7ffa`af518000        0`00028000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [ole32; "C:\Windows\System32\ole32.dll"]+     7ffa`af518000     7ffa`af550000        0`00038000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`af550000     7ffa`af551000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [user32; "C:\Windows\System32\user32.dll"]      7ffa`af551000     7ffa`af5ee000        0`0009d000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [user32; "C:\Windows\System32\user32.dll"]      7ffa`af5ee000     7ffa`af60b000        0`0001d000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [user32; "C:\Windows\System32\user32.dll"]      7ffa`af60b000     7ffa`af60d000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [user32; "C:\Windows\System32\user32.dll"]      7ffa`af60d000     7ffa`af6b5000        0`000a8000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [user32; "C:\Windows\System32\user32.dll"]+     7ffa`af6b5000     7ffa`af6c0000        0`0000b000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`af6c0000     7ffa`af6c1000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [advapi32; "C:\Windows\System32\advapi32.dll"]      7ffa`af6c1000     7ffa`af720000        0`0005f000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [advapi32; "C:\Windows\System32\advapi32.dll"]      7ffa`af720000     7ffa`af754000        0`00034000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [advapi32; "C:\Windows\System32\advapi32.dll"]      7ffa`af754000     7ffa`af755000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [advapi32; "C:\Windows\System32\advapi32.dll"]      7ffa`af755000     7ffa`af756000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [advapi32; "C:\Windows\System32\advapi32.dll"]      7ffa`af756000     7ffa`af758000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [advapi32; "C:\Windows\System32\advapi32.dll"]      7ffa`af758000     7ffa`af759000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [advapi32; "C:\Windows\System32\advapi32.dll"]      7ffa`af759000     7ffa`af762000        0`00009000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [advapi32; "C:\Windows\System32\advapi32.dll"]+     7ffa`af762000     7ffa`af850000        0`000ee000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`af850000     7ffa`af851000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [imagehlp; "C:\Windows\System32\imagehlp.dll"]      7ffa`af851000     7ffa`af85c000        0`0000b000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [imagehlp; "C:\Windows\System32\imagehlp.dll"]      7ffa`af85c000     7ffa`af863000        0`00007000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [imagehlp; "C:\Windows\System32\imagehlp.dll"]      7ffa`af863000     7ffa`af864000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [imagehlp; "C:\Windows\System32\imagehlp.dll"]      7ffa`af864000     7ffa`af865000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [imagehlp; "C:\Windows\System32\imagehlp.dll"]      7ffa`af865000     7ffa`af867000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [imagehlp; "C:\Windows\System32\imagehlp.dll"]      7ffa`af867000     7ffa`af86a000        0`00003000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [imagehlp; "C:\Windows\System32\imagehlp.dll"]      7ffa`af86a000     7ffa`af86c000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [imagehlp; "C:\Windows\System32\imagehlp.dll"]+     7ffa`af86c000     7ffa`af870000        0`00004000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`af870000     7ffa`af871000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [psapi; "C:\Windows\System32\psapi.dll"]      7ffa`af871000     7ffa`af872000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [psapi; "C:\Windows\System32\psapi.dll"]      7ffa`af872000     7ffa`af874000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [psapi; "C:\Windows\System32\psapi.dll"]      7ffa`af874000     7ffa`af875000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [psapi; "C:\Windows\System32\psapi.dll"]      7ffa`af875000     7ffa`af878000        0`00003000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [psapi; "C:\Windows\System32\psapi.dll"]+     7ffa`af878000     7ffa`af8f0000        0`00078000             MEM_FREE    PAGE_NOACCESS                      Free       +     7ffa`af8f0000     7ffa`af8f1000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [ntdll; "C:\Windows\System32\ntdll.dll"]      7ffa`af8f1000     7ffa`af9f9000        0`00108000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image      [ntdll; "C:\Windows\System32\ntdll.dll"]      7ffa`af9f9000     7ffa`afa3d000        0`00044000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [ntdll; "C:\Windows\System32\ntdll.dll"]      7ffa`afa3d000     7ffa`afa3e000        0`00001000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [ntdll; "C:\Windows\System32\ntdll.dll"]      7ffa`afa3e000     7ffa`afa40000        0`00002000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image      [ntdll; "C:\Windows\System32\ntdll.dll"]      7ffa`afa40000     7ffa`afa46000        0`00006000 MEM_IMAGE   MEM_COMMIT  PAGE_READWRITE                     Image      [ntdll; "C:\Windows\System32\ntdll.dll"]      7ffa`afa46000     7ffa`afac2000        0`0007c000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image      [ntdll; "C:\Windows\System32\ntdll.dll"]+     7ffa`afac2000     7fff`fffe0000        5`5051e000             MEM_FREE    PAGE_NOACCESS                      Free       +     7fff`fffe0000     7fff`ffff0000        0`00010000 MEM_PRIVATE MEM_RESERVE PAGE_NOACCESS                        

指令: !vadump : 這個會顯示所有的虛擬內存區域和它的保護屬性

指令: !runaway : 顯示每個Thread消費的時間
  Bit 0 (0x1) 讓調試器顯示每個Thread消耗的用戶模式時間(user time),默認不加就是0x1
  Bit 1 (0x2) 顯示每個Thread消耗的內核時間(kernel time)。
  Bit 2 (0x4) 顯示每個Thread從創建開始經歷了多少時間。

Windbg 關於process的指令:

指令: |
顯示當前Process的信息

0:000> |.  0	id: b60	examine	name: C:\Windows\System32\valWBFPolicyService.exe

指令: !dml_proc
顯示當前Process的信息

0:000> !dml_procDbgId  PID    Image file name0      b60    C:\Windows\System32\valWBFPolicyService.exe

指令: .tlist
顯示本機當前所有Process

指令: process
!process 0 0 顯示進程列表

Windbg 關於thread的指令:

指令: ~ (Thread Status):
波形符(~) 命令显示指定线程或当前进程中的所有线程的信息, ~和~*还是有点区别的,~*会把入口函数和优先级都打印出来

指令: ~
顯示所有thread信息

0:000> ~.  0  Id: b60.b64 Suspend: 0 Teb: 00000000`003bf000 Unfrozen   1  Id: b60.dc4 Suspend: 0 Teb: 00000000`003c5000 Unfrozen   2  Id: b60.e28 Suspend: 0 Teb: 00000000`003c7000 Unfrozen   3  Id: b60.e2c Suspend: 0 Teb: 00000000`003c9000 Unfrozen

指令: ~*
顯示所有thread

.  0  Id: b60.b64 Suspend: 0 Teb: 00000000`003bf000 Unfrozen      Start: valWBFPolicyService+0x7710 (00000001`40007710)      Priority: 0  Priority class: 32  Affinity: f   1  Id: b60.dc4 Suspend: 0 Teb: 00000000`003c5000 Unfrozen      Start: sechost!ScSvcctrlThreadA (00007ffa`adb23db0)      Priority: 0  Priority class: 32  Affinity: f   2  Id: b60.e28 Suspend: 0 Teb: 00000000`003c7000 Unfrozen      Start: valWBFPolicyService+0x1087 (00000001`40001087)      Priority: 0  Priority class: 32  Affinity: f   3  Id: b60.e2c Suspend: 0 Teb: 00000000`003c9000 Unfrozen      Start: valWBFPolicyService+0x1064 (00000001`40001064)      Priority: 0  Priority class: 32  Affinity: f

指令: ~.
顯示當下thread

0:000> ~ ..  0  Id: b60.b64 Suspend: 0 Teb: 00000000`003bf000 Unfrozen      Start: valWBFPolicyService+0x7710 (00000001`40007710)      Priority: 0  Priority class: 32  Affinity: f

指令: ~# 引發當前事件或異常的thread
指令: ~Number 顯示指定序號的thread
指令: ~* k 顯示所有thread的調用棧
指令: ~2 f 凍結2號thread
指令: ~# f 凍結引發異常的thread
指令: ~3 u 解除對3號thread的凍結
指令: ~2 k 顯示2號thread的調用棧
指令: ~0s 切換到 thread 0

指令: !thread
擴展顯示目標系統中線程包括ETHREAD塊在內的摘要信息。該命令只能在內核模式調試下使用

Windbg 關於Stack的指令

指令: k*:
命令顯示給定Thread的調用Stack,以及其他相關信息
~0 k表示顯示0號Thread的調用Stack,直接用k表示打印當前Thread的調用堆棧
kb 顯示傳遞給Stack回溯中的每個函數的前三個參數
kp 顯示傳遞給Stack回溯中的每個函數的所有參數

指令: !findstack
擴展查找包含指定符號或模塊的所有stack

Windbg腳本

指令: .foreach
分析一個或多個命令的輸出並將該輸出中每一個值作為另一個或多個命令的輸入
.foreach [Options] ( Variable { InCommands } ) { OutCommands }

指令: .printf
和C中的printf 语句类似

各種分析情況劇情:

可參考: ephrain
分析 Stack overflow (recursive)
分析 .NET framework process crash
分析 WoW64 process
分析 memory leak
分析 infinite wait
分析 kernel dump
分析 kernel dump for memory problem
分析 complete kernel dump

2019/08/23

oversea remote debug 遠端除錯 怎麼做呢? Windows

通常有兩種方式建立兩地的遠端Debug, 第一種是 teamviewer, 第二種windbg

第一種 teamviewer

就是透過網路的方式可以讓你看到另一台電腦的螢幕, 並且能夠操作那台電腦, 但缺點是如果你的issue必須重新開機或是該issue跟網路與顯示有關的話, 通常連線就可能中斷, 無法繼續分析下去!

這時候就是透過第二種方式吧, windbg remote debugging

微軟其實也有寫得很詳細, 大致上就是建立如下圖的環境

解釋一下,
Debugging Server負責處理整個debug活動順利進行的平台: Host Computer
Debugging Client負責從遠端來控制debug session進行: Remote Computer
為了建立遠端的除錯, 第一個要設定好 debugging server, 然後才讓Client從遠端啟動.

這個地方要特別說一下, Target就是運行著要被除錯程式碼的電腦!
Target與 Host Computer 有時可以是同一台電腦, 有時候必須是分開的兩部電腦, 主要取決於你要除厝的程式碼是kernel mode還是user mode, 講到這裡大家應該可猜出答案, 對啦! 如果是kernel mode系統可能會隨時掛掉, 因此建議要分兩台電腦, 如果是user mode的debugging, 是可以勉強在同一台電腦OK的

介於兩端的連線協定, 有多種選擇: TCP, NPIPE, SPIPE, SSL,或是 COM Port.
假設我透過TCP連線, 並且使用winDbg軟體在 debugging Server/Client兩台電腦上, 作遠端kernel-mode除錯, 可以參考以下步驟:

1. 在 Host電腦, 開啟 windbg 並建立與Target之間的 kernel-mode debugging session

兩種方式:
#1. WinDbg Menu:
如果Windbg處於休眠狀態你可以選單File下拉, 選 Kernel Debug (或直接快捷鍵CTRL+K), 然後當 Kernel Debugging 對話窗出現時, 點選你建立的連線方式: NET, 1394, USB, COM, or Local.

#2. Command Prompt:
如果透過指令介面, 啟動WinDbg後輸入以下指令:

  • windbg [-y SymbolPath] -k net:port=PortNumber,key=Key[,target=TargetIPAddress|TargetMachineName]
  • windbg [-y SymbolPath] -k 1394:channel=1394Channel[,symlink=1394Protocol]
  • windbg [-y SymbolPath] -k usb:targetname=USBString
  • windbg [-y SymbolPath] -k com:port=ComPort,baud=BaudRate
  • windbg [-y SymbolPath] -k com:pipe,port=\\VMHost\pipe\PipeName[,resets=0][,reconnect]
  • windbg [-y SymbolPath] -k com:modem
  • windbg [-y SymbolPath] -kl
  • windbg [-y SymbolPath] -k

2. 暫時中斷,

從Debug選單選取Break, 或直接按 CTRL-Break.

3. 在視窗 Debugger Command Window, 輸入指令做連線


指令:
.server tcp:port=5005
(這個 port number 5005 可以根據你的狀況改變)

4. WinDbg將會回應如下面訊息

dbgcmd

Server started.  Client can connect with any of these command lines0:  -remote tcp:Port=5005,Server=YourHostComputer

5. 到了遠端電腦(remote computer)

開啟 WinDbg, 從選單File下拉, 選取 Connect to Remote Session

6. 在 Connection String 底下,

輸入
tcp:Port=5005,Server=YourHostComputer
這裡的 YourHostComputer 就必須視HOST電腦的名稱(debugging server).
再按 OK

2019/08/06

關於 Linear Aperture-Space Segments

轉錄自 小小paul

線性aperture空間段類似於線性內存空間段.但是線性aperture段只是一段虛擬地址空間而不能真正保存數據。爲了保存數據必須分配系統內存頁,而這段虛擬地址空間也必須被重定向到這些頁上。小端口驅動必須實現 DxgkDdiBuildPagingBuffer中的DXGK_OPERATION_MAP_APERTURE_SEGMENT 和 DXGK_OPERATION_UNMAP_APERTURE_SEGMENT操作來處理地址的重定向而且必須按照DriverEntry of Display Miniport Driver描述的方式暴露這個函數。DxgkDdiBuildPagingBuffer會收到需要被重定向的地址範圍和被分配的系統物理內存頁所引用的MDL。

顯卡小驅動程序通常通過編程一個頁表來完成地址空間範圍的重定向,而視頻內存管理器並不知道這個頁表。

驅動程序必須在DXGK_SEGMENTDESCRIPTOR結構的Flags成員中設置Aperture位域標誌來指定一個線性Aperture空間段。驅動程序還可以設置以下位域標誌,以表明額外的段支持:

CpuVisible表示這個段CPU可以訪問
CacheCoherent表示段與段重定向到的頁面保持CPU緩存一致性。
下圖顯示了線性Aperture空間段的可視化表示。

2019/08/02

到底什麼是 .NET Framework 呢 ?

微軟有個願景,他幫全世界的網民化個大餅,這個大餅叫做 .NET。
為了這個遠景,所以微軟在 Windows 加上一層平台,因為是要達成 .NET 的遠景,所以取名叫做 .NET Framework。

那這層平台式做什麼的。
PC 什麼都沒裝,只有 BIOS 的運作,所以您可以用組合語言燒在晶片下一些指令教電腦做事。

您也可以裝上 DOS ,這時候可以執行一些 DOS 的指令或 DOS 版的程式。
如果你要執行 Windows 的程式,那您必須在 DOS 上加裝 Windows 系統。
同樣的,如果您要執行 .NET 的程式,那麼您就必須在 Windows 上加裝 .NET Framework。

.NET Framework相當於 J2EE,其中 .NET Framework 裡面有個 CLR (Common Language Runtime),就類似於 Java Virtual Machine。其他的 ADO.NET, ASP.NET, XML…可以想像是 .NET Framework裡的模組,讓您可以更快的完成程式開發。

至於您所說的 VB.NET, ADO.NET…,這些都是 .NET Framework 的一部份。

簡單的說,以前寫 ASP ,您可以使用 ADO 來存取資料庫,在 .NET Framework 有一個更方便更強的存取方式,就是透過 ADO.NET。

以前寫 Windows 上執行的程式用 VB6,如果要寫 .NET Framework 上執行的程式,那就要用 VB.NET。

例外 .NET Framework 是跨語言的,所以 VB, C , C#, Perl…共有 26 種語言可用。

.NET Framework是由Microsoft專為Windows所開發的平台,解決同一程式在不同版本或是不同台電腦的Windows作業系統中的相容性。.NET也提供程式開發工具(Visual Studio),以強大的物件導向功能與多樣化的類別庫彙整多種程式語言,像是C、VB.NET、C++、Python。.NET Framework的概念其實與Oracle的JAVA很相近,彼此也是競爭對手。

然後
可以看這篇文章:
ASP.NET and ASP.NET Core, .NET Framework and .NET core and .NET Standard

參考:
.NET Framework 使用者入門

[轉]凝視散記: COM - Microsoft物件導向開發架構的基礎

(轉錄自 凝視、散記 )

COM是Microsoft物件導向架構的基礎,本文主要是重點介紹COM的理論及運作機制。基礎理論包括:COM的概念、應用及定義。運作機制探討COM底層的運作,將提到:COM的介面、識別及呼叫,更進一步探討跨行程及跨機器時如何呼叫。最後很簡要的介紹COM以外另外CORBA及JAVA的做法。

什麼是元件(Component)?

元件是一種有公開的屬性、方法、事件,可以在應用程式中呼叫的二進位檔案。主要的目的是為了在程式開發時可以「重複使用」這些已經編譯好的檔案,以提高開發效率降低成本。此外,因為元件的發行與使用都是二進位檔案,所以在安裝及使用時都是看不到原始碼的,也可以達到保護source code的目的。再就Internet的應用而言,由於元件已經經過編譯,所以在執行的速度上會比ASP指令檔(Script)來得快,因此較佳的執行效能也是使用元件的原因之一。

如果我們將應用程式想成是一件產品;元件就好像是產品的零件。當你完成產品的需求規劃後,不需要自行撰寫所有的程式,只要選取或購買符合需求的元件進行組裝便能完成專案。這種系統開發的哲學就是所謂的CBSE—Component Based System Engineering。CBSE發展應用程式的流程如下:定義應用程式的功能à設計使用者介面à查詢軟體元件目錄尋找符合功能的軟體元件à查詢各軟體元件的介面(interface)à撰寫應用程式組合各軟體元件à輸入各軟體元件的介面值à呼叫各軟體元件à完成系統功能。

什麼是COM (Component Object Model)

每個元件都可視為是一段獨立的副程式,讓應用程式透過Run Time時與元件的相互連結而完成系統功能,便是Microsoft發展COM主要的目的。Microsoft COM的架構也是CBSE的實現,程式開發者只要有軟體元件的清單及清楚定義的介面,便可在應用程式中重複使用這些現成的元件。

1991年Microsoft提出一項新的規格 OLE (Object Linking and Embedding) 。Microsoft當時的OLE 1.0,只提供處理「複合文件」﹙compound document﹚的功能,這種以文件為中心﹙非以應用程式為中心﹚,能夠在單一文件儲存如文字、圖形、視訊與聲音等多重格式資料的規格並未被廣泛接受。到了1993年Microsoft公佈OLE 2.0版的規格,就是COM 架構,包含更多功能,最重要的,COM規範了程式間互動﹙interoperability﹚的方法與介面,融入了封裝、多型等物件導向的觀念。

其實Microsoft大部份的產品都已COM化。如:IE、OutLook、Excel等不僅都是可以獨立使用的軟體,也都是component。只要知道它們提供了哪些 API﹙Application Program Interface﹚,你便可以在程式中把它們當成元件來呼叫。你要做的只是翻翻programmer guide,查出所提供的 method,然後就可以在程式中呼叫它們來完成工作。 而且你寫的軟體也可以成為別人軟體的元件或一項功能(feature) 。在使用元件之前,必須執行「服務註冊」的指令﹙在Dos模式之下執行Regsvr32 myCom.dll﹚,向作業系統「註冊」該元件。然後就可以在有支援 COM/DCOM的開發工具,如:VB, Delphi, Visual FoxPro, C++ Builder, Active Server Page (ASP)中來使用已註冊的元件。

COM的定義

COM是一套規範,規定了製作具有動態交換能力元件的方法。它制定了用戶端程式與及元件間溝通的介面,以達到相互操作﹙Interoperability﹚所應共同遵循的一套標準。讓二進位物件程式的設計、使用以及獨立開發成為可行。事實上,COM並不只是一份規格,它還實作了一組API,叫做COM程式庫,提供所有用戶端程式與元件都會用到的元件管理服務。

COM元件包含以Win32動態連結程式庫( DLL )及以 .EXE形式存在的可執行檔,遵循COM的標準所撰寫出來的元件具備以下幾點的特性:

  • 可以用二進位的格式傳送。
  • 具有語言獨立性:可以使用任何語言撰寫,也可以呼叫任何語言的元件。
  • 是動態連結的形式。
  • 具位置透通性﹙location transparent﹚:用戶端程式可以將遠端機器上的元件當成本地端機器上的元件一樣使用。
  • 與用戶端程式獨立:可以在不干擾舊有用戶端程式的前提下進行新物件的改版。

COM的運作機制

每個COM物件都提供一個以上的介面( Interface ),每個介面都提供一些方法。client端只能透過其介面呼叫COM物件介面內的方法,來使用該物件的服務,而無法直接存取物件內的資料。

COM的介面指的是記憶體中一個包含函式指標陣列的Virtual function table,每一個陣列元素儲存指向元件所實作的函式位址的指標。COM所用來定義介面的標準為IDL—介面定義語言﹙Interface Definition Language﹚。IDL是Open Source Foundation為了在分散式計算環境中使用RPC﹙Remote Procedure Call﹚所制定的。

COM規定所有的介面都必須繼承IUnknown介面﹙註﹚,因此每個COM介面都一定包含:QueryInterface、AddRef與Release等三個函式。

每個COM Object都是屬於特定類別( class )的個體( instance )。我們必須先經由COM程式庫得知道物件的類別,才能開始執行該物件的真正個體。因為client端在使用COM物件介面的方法前,必須先取得該介面的指標﹙Pointer﹚。因此當client端尚未取得此物件所提供的任何介面指標時,會利用COM程式庫中的CoCreateInstance函式﹙註﹚來取得物件的第一個介面指標。當server便開始執行此類別的實作後,client端便可以直接向該物件要求其它所提供的介面的指標,進而使用該物件的任何方法或服務。

每個物件會利用CLSID作為鍵值在Windows的Registry登錄資料庫中記錄元件所在的DLL檔案名稱,以便讓CoCreateInstance利用CLSID作機碼查得檔案的名稱。 Registry是Windows作業系統用來紀錄系統軟、硬體、設定、以及使用者的相關資訊,必要時可以在Registry中新增紀錄或讀取資料。COM的用戶端程式就是利用Registry找出所要使用的元件。

Client端在建立物件透過CoCreateInstance取得該物件第一個介面指標後,就可以呼叫QueryInterface,並傳入該介面的IID,利用IUnknown::QueryInterface,向物件要求取得其他方法所在介面的指標。如果成功的話,就可以使用傳回的指標,便得知物件所提供某個特定介面。

介面一旦公佈就不能再更改了。如果必須異動,只能再定義一個新的介面,新的介面可以繼承原來舊的介面,不過介面的唯一識別碼IID,就是Globally Unique Identifier ( GUID )一定是唯一的,不可以重複。

GUID ( Globally Unique Identifier )是為了讓全球程式設計師所設計的COM物件及介面不必依賴集中管理就能擁有唯一的識別。我們可以藉助Microsoft的提供的工具程式GUIDGEN.EXE或UUIDGEN.EXE來產生唯一的GUID。COM介面的GUID可由IID這個特別資料型別來表示。而Class也有自己的GUID,為了與IID區別,COM另外定義了CLSID這個資料型別,專門用來放置類別的識別碼。

使用COM物件時,客戶端會強制該物件的新個體開始執行。該如何管理物件的執行?而且通常同時會有許多client端程式使用同一物件,物件應該在何時停止執行?

這個問題由IUnknown介面所提供的AddRef以及Release所maintain的 Reference Counter而獲得解決。每個COM物件都有自己的Reference Counter,每當物件傳遞出一個介面的指標時,Reference Counter便會加一。每結束一個使用介面時,必須透過介面指標呼叫Release, Reference Counter便會減一。當物件的Reference Counter等於0的時候,物件本身便會destroy。

COM的類型

每個COM物件的實作部分都位於伺服器( Server )中。Server中含有真正用來實作物件方法的程式碼,並且負責維護物件的資料。COM有三種類型:

  • In-process Server:物件的實作係位於動態連結函式庫中,執行時與client端為於同一process中
  • Local Server:物件的實作位於與客戶端相同的機器中,但是在分開的行程內。
  • Remote Server:物件的實作位於與客戶端不同的機器內所執行的DLL或獨立行程中。跨機器的分散式系統必須借助Distributed COM ( DCOM ) ﹙註﹚的支援才得以完成。DCOM是一個高階的網路協定,建立於COM之上的規格和服務,讓位於不同電腦上的行程內之COM元件可以互相運作

對client端而言,不管物件實作是在哪一種伺服器中,都是透過介面指標,來啟動物件、取得物件介面的指標、叫用方法、釋放指標,沒有任何差別。不過server上的機制便有所不同。

第一種情形:In-process Server:COM物件的實作位於行程中的伺服器﹙如圖一﹚。
client端的介面指標直接指向物件的介面。透過vtable裡的函數指標直接呼叫物件的方法。

圖一

第二種情形:Local Server:COM物件的實作位於本地端的不同行程中﹙如圖二﹚。
由於vtable裡的函數指標無法跨行程,因此client端的介面指標無法直接指到物件的介面,因此會改為指向client端行程內的proxy介面,由proxy介面將存取要求透過RPC轉送給stub。client端將proxy介面是為object而真正的object則將stub視為client。

圖二

第三種情形:Remote Server:COM物件的實作是位於不同機器上﹙如圖三﹚。
在DCOM中所加入支援遠端伺服器的架構,client、proxy及stub間的互動與Local Server類似。

圖三

無論是跨行程或是跨機器的情形,在伺服器與client端中,都需要傳輸參數與資料的標準格式,以及進行溝通。proxy將呼叫的參數包裝為標準格式的動作稱為marshaling,透過RPC傳輸給stub,stub將收的到要求,卸除改為接收行程適用格式的相反動作,則稱為unmarshaling。Proxy與Stub的存在主要就是為了進行marshaling與unmarshaling。

Proxy與Stub的建立只要使用IDL ( Interface Description Language )來撰寫介面,就可以讓MIDL ( Microsoft IDL )編輯器幫我們產生proxy與stub DLL的程式,不需要自己動手撰寫這些程式。

元件開發的不同架構

在Microsoft的架構之下你可以利用VB及VC來開發元件.利用VB的ActiveX DLL來開發元件是最快速的方式。而MTS提供元件的管理以及交易(Transaction)的管理.這種架構在Windows 2000上已經整合為COM+。這也是Microsoft分散式應用系統設計的開發架構。

目前在元件的開發方面發展,有三大陣營 -
DCOM (Distributed Component Object Model)、CORBA (Common Object Request Broker Architecture ) 和 Java RMI (Remote Method Invocation)

Microsoft的 DCOM 就是根據其原本非分散式物件模組 COM 所進化而來的,它已被定為新一代電腦語言的發展基礎。DCOM 其實是二次元層次 (Binary Level) 的分散式物件介面標準。它既可支援 NT 及 Windows 98,此元件更可伸延到Internet之策略,Active X 就是其中的表表者。

CORBA 是由七百多間業內的公司參與之 OMG (Object Management Group) 所制定的標準,其目的是要整合大部份的物件系統。這種物件管理架構 (OMA,Object Management Architecture) 的主要溝通機制,其中物件與物件間之溝通是透過物件訊息仲裁者 (ORB)。而 ORB 是在主從架構間提供一仲裁服務,決定訊息的流向。CORBA 規範介於物件介面的層次 (Interface Level),而物件間就以介面描述語言 (IDL, Interface Definition Language) 來描述。將介面 (Interface) 與實作 (Implementation) 分開,提供多重的繼承架構及動-靜態介面的召喚方式。

Java 是昇陽微系統 (Sun Microsystems) 所提出結合了程式語言和虛擬機器 (Virtual Machine) 的分散式物件環境。與 DCOM 和 CORBA 比較,它不能採用多種不同的程式語言來發展,不過由於其虛擬機器的環境,使 Java 容易地跨平臺運行。