1、http://www.cnblogs.com/Sonic2007/category/127341.html

  1.1、Windbg内核调试之一_ Vista Boot Config设置 - Da Vinci - 博客园.html

    http://www.cnblogs.com/Sonic2007/archive/2008/03/20/1114807.html

Windbg进行内核调试,需要一些基本的技巧和设置,在这个系列文章中,我将使用Windbg过程中所遇到的一些问题和经验记录下来,算是对Kernel调试的一个总结,同时也是学习Windows系统内核的另一种过程。

很多人说Windbg不如SoftIce好用, 但是我使用过程中还是觉得Windbg能更好的反映系统状态, 而且相比SoftIce, Windbg更稳定(虽然它的部分操作略显复杂), 下面介绍Windbg的Kernel模式调试第一部分: 双机连接设置.

Vista和XP不同, 没有boot.ini文件, 需要用bcdedit进行启动设置。(关于启动数据配置编辑器BCD的具体设置, 参见另一篇文章: (From MS)Vista: 启动配置数据编辑器(BCD))

在administrator权限下, 进入command line模式,  键入bcdedit命令, 会出现以下界面:

然后, 设置端口COM1, baudrate为115200 (除COM1外, 也可以用1394或USB. 1394用起来比COM口快多了, 当然前提是你需要有1394卡及其驱动. 很恶心的是Vista不再支持1394的文件传输协议, 但是用windbg双机调试还是可以的)
命令为:
bcdedit /dbgsettings {serial [baudrate:value][debugport:value] | 1394 [channel:value] | usb }

接着, 我们需要复制一个开机选项, 以进入OS的debug模式
命令为:
bcdedit /copy {current} /d DebugPoint
DebugPoint为选项名称, 名字可以自己定义. 然后复制得到的ID号.

接着增加一个新的选项到引导菜单
bcdedit /displayorder {current} {ID}
这里的{ID}的ID值是刚生成的ID值.

激活DEBUG : bcdedit /debug {ID} ON
这里的{ID} 的ID值还是刚才的ID值.

命令执行成功后, 重新启动机器.

选择DebugPoint登录,开启Windbg

连接成功, 则显示如下:
Microsoft (R) Windows Debugger  Version 6.6.0007.5
Copyright (c) Microsoft Corporation. All rights reserved.

Opened \\.\pipe\com_1
Waiting to reconnect...
Connected to Windows Vista 6000 x86 compatible target, ptr64 FALSE
Kernel Debugger connection established.
Symbol search path is: symsrv*symsrv.dll*F:\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is: 
Windows Vista Kernel Version 6000 MP (1 procs) Free x86 compatible
Built by: 6000.16386.x86fre.vista_rtm.061101-2205
Kernel base = 0x81800000 PsLoadedModuleList = 0x81911db0
System Uptime: not available
Break instruction exception - code 80000003 (first chance)
*******************************************************************************
*                                                                             
*   You are seeing this message because you pressed either                    
*       CTRL+C (if you run kd.exe) or,                                        
*       CTRL+BREAK (if you run WinDBG),                                       
*   on your debugger machine's keyboard.                                      
*                                                                             
*                   THIS IS NOT A BUG OR A SYSTEM CRASH                       
*                                                                             
* If you did not intend to break into the debugger, press the "g" key, then   
* press the "Enter" key now.  This message might immediately reappear.  If it 
* does, press "g" and "Enter" again.                                          
*                                                                             
*******************************************************************************
nt!RtlpBreakWithStatusInstruction:
81881760 cc              int     3

总结: 虽然利用VMware虚拟机能更方便的设置双机的调试环境, 而且这种模拟环境也是大多数人使用的(方便), 但是如果有双机条件的话,  还是希望大家能够使用两台机器, 因为用虚拟机进行Kernel调试, 真不是一般的慢! 基本就等于死机. 即时你的主机内存2G, 分给VMware1G, 还是会相当卡(Kerenl模式与User模式不同).

  1.2、Windbg内核调试之二_ 常用命令 - Da Vinci - 博客园.html

    http://www.cnblogs.com/Sonic2007/archive/2008/03/22/1117538.html

运用Windbg进行内核调试, 熟练的运用命令行是必不可少的技能. 但是面对众多繁琐的命令, 实在是不可能全部的了解和掌握. 而了解Kernel正是需要这些命令的指引, 不断深入理解其基本的内容. 下面, 将介绍最常用的一些指令, 使初学Kernel调试的朋友们能有一个大致的了解. 至于如何熟练的运用它们, 还需要实际的操作过程中进行反复的琢磨.

Windbg能够方便的进行远程调试和本地进程调试(只限于User模式), 远程调试又分User mode和Kernel mode两种. 个人认为用Windbg进行远程的User mode调试还不如用Visual Studio来的方便, 毕竟要一些相应的配置才行, 而Visual Studio只需要远程机器的IP地址即可.(当然, 如果你在LiveCD或WinPE下进行User mode的调试, 这时候没有VS, Windbg就是不二之选了). Windbg的优势就在于远程的Kernel模式的调试, 这是VS所做不到的.

1. 首先是设置符号路径(无论在User mode下还是Kernel mode下都需要), 在Windbg的符号路径对话框中, 输入以下符号路径:

srv*c:\symbols*http://msdl.microsoft.com/download/symbols

这个符号路径是自动在微软给定的symbols路径下进行自动搜索, 一些常用的符号都可以利用这个链接自动找到. 当然, 如果你的本地已经有相应的符号路径, 包含本地的也可以.

2. 等Windbg的联机状态设置好后, 按下Ctrl+break, 中断当前的Kernel状态, 在Windbg的命令行窗口输入"?", 则会输出帮助菜单, 在这个Menu中会显示一些常用的命令:

(1)断点指令

     B[C|D|E] [<bps>]
     clear|disable|enable breakpoints
     BL
     list breakpoints
     BP <address>
     set soft breakpoints
     BA <access> <size> <addr>
     break on access
  (2)数据查看指令
     D[type][<range>]
     dump memory
     DT [-n|y] [[mod!]name] [[-n|y]fields][address] [-l list] [-a[]|c|i|o|r[#]|v]
     dump using type information
     DV [<name>] 
     dump local variables
  (3)数据修改指令
     E[type] <address> [<values>]
     enter memory values
  (4)运行
     G[H|N] [=<address> [<address>...]] 
     go
     P [=<addr>] [<value>]
     step over
  (5)堆栈操作
     K[b|p|P|v]
  (6)显示加载的模块列表
     LM
     list modules
  (7)寄存器操作
     R [[<reg> [= <expr>]]]
     view or set registers
  (8)Search指令
     S[<opts>] <range> <values>
     search memory
  (9)跟踪指令T,TA,TB,TC,WT,P,PA,PC
  (10)退出
      Q

(11)反汇编
      U[<range>]

其中最常用的就是反汇编操作和显示模块操作. LM命令显示当前加载的模块. 当你连接过程中, Windbg提示相应的module找不到时, 就可以运用这个命令进行查看. LM的一个扩展命令是"lm t n", 这个命令显示当前所有加载的驱动信息(过去的命令是!driver),在调试内核驱动的过程中非常有用,可以找到相应驱动的起始地址。反汇编命令u, 可以在相应的地址中逐步的解析代码,这在内核调试中是最常用的一种查看代码的方式。

除上面的一些基本命令之外,还有一些非常有用的指令:
  
  (1)K[KB|KP]
     显示当前的堆栈,当然也可以用alt+6直接调出窗口显示
  
  (2)!process
     显示当前的进程EXPROCESS状态,!process 0 0 显示所有的进程状态

(3)!thread
     显示当前的线程状态,dt nt!_ethread显示ETHREAD结构

(4)!drvobj [path]
     列出当前的驱动程序在驱动对象中的例程,其中path是驱动的设备路径,例如: !drvobj \filesystem\fat 2 列出FAT文件系统驱动的例程

(5)dt nt!_*
     查看内核的数据结构
  
  (6)!stack 0
     显示线程当前地址
  
  (7)!ioapic
     查看I/O的中断控制器

(8)!irql
     查看CPU的IRQL,这在CPU中断调试中非常有用

(9)!exqueue
     可以看系统辅助的线程列表

(10)!reg viewlist
     注册表的存储显示,!reg hivelist显示注册表一个存储的内存使用量

(11)!vm
     显示系统的内存池信息

(12)dt _TOKEN
     显示内部访问令牌

(13)!object \device
     显示设备对象信息,用winobj工具也可以看到

以上命令是一些常用的内核调试命令, 还有非常多的命令技巧, 不可能全部一一解释. 在今后的文章, 还会结合具体的调试过程分析进行逐步介绍. 内核的调试无非是处理器, 系统设备, 内存, 进程线程, 注册表, 驱动这几大类的信息, 每一类都有很多的命令, 需要我们在实际的调试过程中不断认识和体会它的用法. 当然, 理解这些命令用法的前提是需要我们对操作系统内部构造有一个清晰的认识. 这需要不断的学习, 对OS有一个全局的把握, 这样才能更深入的理解它. 而通过Windbg的内核调试, 我们有一种更好的方式直接与Kernel打交道, 这对我们深入理解和认识操作系统有很大的帮助. 下一节我们将通过一个实际的调试driver的例子, 来进一步认识Windbg在内核调试中的作用.

  1.3、Windbg内核调试之三_ 调试驱动 - Da Vinci - 博客园.html

    http://www.cnblogs.com/Sonic2007/archive/2008/03/27/1125632.html

这次我们通过一个实际调试驱动的例子,来逐步体会Windbg在内核调试中的作用.
由于条件所限,大多数情况下,很多人都是用VMware+Windbg调试内核(VMware的确是个好东西).但这样的调试需要占用大量的系统资源,对于和我一样急性子的朋友来说这是不可接受的:).利用双机调试就可以让你一边喝咖啡一边轻松的看结果,而不至于郁闷的等待每次长达数分钟的系统响应.有关双机调试的基本设置,请参考:http://www.cnblogs.com/Sonic2007/archive/2008/03/20/1114807.html

本次调试驱动所构建的环境如下:

host computer: WinXP+Windbg
Target computer:  Vista SP1
driver object: sys
connect setting: 1394数据线

说明: 1.1394卡在很多机器上都已经没有了,Vista也取消了1394的数据连接协议(调试还是可以的),但不可否认的是利用1394数据线连接调试要比COM口和USB速率快很多(为什么好用的东西却得不到支持!).2.本次调试的driver是公司开发的某个软件的驱动程序,拿来尝试在Vista SP1下track.由于涉及到商业机密,本驱动源代码不便公开.3.Vista SP1就没什么好说的了,前些天才发布,MS又一个失败的典型.

OK,Let's go!
该驱动是一个类型sr.sys(MS的System Restore驱动)的Filter Driver,属于文件系统过滤驱动,加载在文件系统驱动上层,由Filter Manager负责与用户层和底层通信.连接到目标机后,按下Ctrl+break中断当前状态.(注:你也可以进入到explorer之后再中断,为了了解驱动加载时的进入点,以及系统启动时内核的装态,我们中断到这里)

Microsoft (R) Windows Debugger  Version 6.6.0007.5
Copyright (c) Microsoft Corporation. All rights reserved.

Using 1394 for debugging
Opened \\.\DBG1394_INSTANCE01
Waiting to reconnect...
Connected to Windows Vista 6000 x86 compatible target, ptr64 FALSE
Kernel Debugger connection established.
Symbol search path is: D:\symbolslocal; D:\IR\SystemOK\Restore\Driver\objchk_wlh_x86\i386
Executable search path is: 
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntkrnlmp.exe - 
Windows Vista Kernel Version 6000 MP (1 procs) Free x86 compatible
Built by: 6000.16584.x86fre.vista_gdr.071023-1545
Kernel base = 0x81800000 PsLoadedModuleList = 0x81908ad0
System Uptime: not available
WARNING: Whitespace at start of path element
WARNING: Whitespace at start of path element
Break instruction exception - code 80000003 (first chance)
*******************************************************************************
*                                                                                                                                           
*   You are seeing this message because you pressed either                                                         
*       CTRL+C (if you run kd.exe) or,                                        
*       CTRL+BREAK (if you run WinDBG),                                      
*   on your debugger machine's keyboard.                                      
*                                                                             
*                   THIS IS NOT A BUG OR A SYSTEM CRASH                       
*                                                                             
* If you did not intend to break into the debugger, press the "g" key, then   
* press the "Enter" key now.  This message might immediately reappear.  If it 
* does, press "g" and "Enter" again.                                          
*                                                                             
*******************************************************************************
nt!RtlpBreakWithStatusInstruction:
818355e8 cc              int     3

然后,在Command line里键入lm,查看当前系统加载的模块和驱动(会发现我们的driver列在其中):

kd> lm
start    end        module name
80404000 80412000   PCIIDEX    (deferred)             
80412000 80419000   intelide   (deferred)             
80419000 80429000   mountmgr   (deferred)             
80429000 80438000   volmgr     (deferred)             
80438000 8045d000   pci        (deferred)             
8045d000 80465000   msisadrv   (deferred)             
80465000 8046e000   WMILIB     (deferred)             
8046e000 804b1000   acpi       (deferred)             
804b1000 804be000   WDFLDR     (deferred)             
804be000 80539000   Wdf01000   (deferred)             
80539000 8061a000   CI         (deferred)             
8061a000 80655000   CLFS       (deferred)             
80655000 8065d000   BOOTVID    (pdb symbols)          
8065d000 80666000   PSHED      (deferred)             
80666000 806c6000   mcupdate_GenuineIntel   (deferred)             
806c6000 806ce000   kdcom      (deferred)             
81800000 81b95000   nt         (pdb symbols)          
81b95000 81bc9000   hal        (pdb symbols)         
81c06000 81c0e000   spldr      (deferred)             
81c0e000 81c44000   volsnap    (deferred)             
81c44000 81cae000   ksecdd     (deferred)             
81cae000 81db6000   Ntfs       (deferred)             
81db6000 81def000   NETIO      (deferred)             
81def000 81e1a000   msrpc      (deferred)             
81e1a000 81f1e000   ndis       (deferred)             
81f1e000 81f270c0   PxHelp20   (deferred)             
81f28000 81f4f000   sys32v   (private pdb symbols)  
81f4f000 81f5f000   fileinfo   (deferred)             
81f5f000 81f90000   fltmgr     (deferred)             
81f90000 81fae000   ataport    (deferred)             
81fae000 81fb6000   atapi      (deferred)             
81fb6000 82000000   volmgrx    (deferred)             
8234f000 82358000   crcdisk    (deferred)             
82358000 82368000   agp440     (deferred)             
82368000 82389000   CLASSPNP   (deferred)             
82389000 8239a000   disk       (deferred)             
8239a000 823bd000   fvevol     (deferred)             
823bd000 823e2000   ecache     (deferred)             
823e2000 823f1000   mup        (deferred)             
823f1000 82400000   partmgr    (deferred)

注: 若符号文件没有加载成功,Windbg会提示响应的符号找不到,不过一般Windbg会自己寻找符号文件路径.实在找不到时,就包含
srv*c:\symbols*http://msdl.microsoft.com/download/symbols, 然后reload一下(!reload).

另外,键入lm t n, 我们可以查看更为详细的模块及驱动信息.
然后,键入!thread和Kp,查看当前的线程详细信息和堆栈(或者Alt+6也可以看stack).注意当前thread的ID:

kd> !thread
THREAD 84254ae8  Cid 0004.0008  Teb: 00000000 Win32Thread: 00000000 RUNNING on processor 0
Not impersonating
Owning Process            84254d90       Image:         System
Wait Start TickCount      0              Ticks: 1 (0:00:00:00.015)
Context Switch Count      1             
UserTime                  00:00:00.0000
KernelTime                00:00:00.0015
Win32 Start Address nt!Phase1Initialization (0x819433ae)
Stack Init 81c06000 Current 81c05db8 Base 81c06000 Limit 81c03000 Call 0
Priority 31 BasePriority 8 PriorityDecrement 0
ChildEBP RetAddr  Args to Child              
81c05af0 818aa92c 00000001 81867999 0002625a nt!RtlpBreakWithStatusInstruction (FPO: [1,0,0])
81c05af8 81867999 0002625a 00000000 00000001 nt!KdCheckForDebugBreak+0x22 (FPO: [0,0,0])
81c05b18 81836cfd 81928100 000000d1 81c05b9c nt!KeUpdateRunTime+0x270
81c05b18 81ba4130 81928100 000000d1 81c05b9c nt!KeUpdateSystemTime+0xed (FPO: [0,2] TrapFrame @ 81c05b28)
81c05b9c 81ba3fd0 81bb28a0 8181dced 81c05bc8 hal!XmGetCodeByte+0x30 (FPO: [Non-Fpo])
81c05bac 81ba40c5 81bb28a0 0000c000 00001da4 hal!XmEmulateStream+0x88 (FPO: [Non-Fpo])
81c05bc8 81ba374d 00000010 81c05c0c 8181dced hal!XmEmulateInterrupt+0x80 (FPO: [Non-Fpo])
81c05bdc 81ba0a1c 00000010 81c05c0c 00000000 hal!x86BiosExecuteInterruptShadowed+0x43 (FPO: [Non-Fpo])
81c05bf8 81ba0a5b 00000010 81c05c0c 00000000 hal!x86BiosCall+0x22 (FPO: [Non-Fpo])
81c05c2c 80656697 80806ae0 8080f438 00000000 hal!HalpBiosDisplayReset+0x25 (FPO: [Non-Fpo])
81c05c58 81b2cd6d 00000001 81b0ab01 80806ae0 BOOTVID!VidInitialize+0x135 (FPO: [Non-Fpo])
81c05c7c 81b3f098 00000001 80806ae0 00000007 nt!InbvDriverInitialize+0x81
81c05d74 819433bb 81c05dc0 819afbad 80806ae0 nt!Phase1InitializationDiscard+0xd0
81c05d7c 819afbad 80806ae0 81c0e680 00000000 nt!Phase1Initialization+0xd
81c05dc0 8189a346 819433ae 80806ae0 00000000 nt!PspSystemThreadStartup+0x9d
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16

kd> kp
ChildEBP RetAddr  
81c05af0 818aa92c nt!RtlpBreakWithStatusInstruction
81c05af8 81867999 nt!KdCheckForDebugBreak+0x22
81c05b18 81836cfd nt!KeUpdateRunTime+0x270
81c05b18 81ba4130 nt!KeUpdateSystemTime+0xed
81c05b9c 81ba3fd0 hal!XmGetCodeByte+0x30
81c05bac 81ba40c5 hal!XmEmulateStream+0x88
81c05bc8 81ba374d hal!XmEmulateInterrupt+0x80
81c05bdc 81ba0a1c hal!x86BiosExecuteInterruptShadowed+0x43
81c05bf8 81ba0a5b hal!x86BiosCall+0x22
81c05c2c 80656697 hal!HalpBiosDisplayReset+0x25
81c05c58 81b2cd6d BOOTVID!VidInitialize+0x135
81c05c7c 81b3f098 nt!InbvDriverInitialize+0x81
81c05d74 819433bb nt!Phase1InitializationDiscard+0xd0
81c05d7c 819afbad nt!Phase1Initialization+0xd
81c05dc0 8189a346 nt!PspSystemThreadStartup+0x9d
00000000 00000000 nt!KiThreadStartup+0x16

键入!process [PID] 0, 查到当前进程:

kd> !process 0004.0008 0
PROCESS 84254d90  SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000
    DirBase: 00122000  ObjectTable: 830001d0  HandleCount:   1.
    Image: System
    VadRoot 00000000 Vads 0 Clone 0 Private 0. Modified 0. Locked 0.
    DeviceMap 00000000
    Token                             83003830
    ElapsedTime                       00:00:00.015
    UserTime                          00:00:00.000
    KernelTime                        00:00:00.000
    QuotaPoolUsage[PagedPool]         0
    QuotaPoolUsage[NonPagedPool]      0
    Working Set Sizes (now,min,max)  (4, 0, 0) (16KB, 0KB, 0KB)
    PeakWorkingSetSize                0
    VirtualSize                       0 Mb
    PeakVirtualSize                   0 Mb
    PageFaultCount                    0
    MemoryPriority                    BACKGROUND
    BasePriority                      8
    CommitCharge                      0

THREAD 84254ae8  Cid 0004.0008  Teb: 00000000 Win32Thread: 00000000 RUNNING on processor 0

在lm命令列出的信息中,start是模块的起始地址,通过键入"u 驱动起始地址",我们可以反汇编出它的代码:

kd> u 81f28000
sys32v!SysAllocatePostCopyWorkItem <PERF> (sys32v+0x0):
81f28000 4d              dec     ebp
sys32v!SysAllocatePostCopyWorkItem <PERF> (sys32v+0x1):
81f28001 5a              pop     edx
sys32v!SysAllocatePostCopyWorkItem <PERF> (sys32v+0x2):
81f28002 90              nop
sys32v!SysAllocatePostCopyWorkItem <PERF> (sys32v+0x3):
81f28003 0003            add     byte ptr [ebx],al
sys32v!SysAllocatePostCopyWorkItem <PERF> (sys32v+0x5):
81f28005 0000            add     byte ptr [eax],al
sys32v!SysAllocatePostCopyWorkItem <PERF> (sys32v+0x7):
81f28007 000400          add     byte ptr [eax+eax],al
sys32v!SysAllocatePostCopyWorkItem <PERF> (sys32v+0xa):
81f2800a 0000            add     byte ptr [eax],al
sys32v!SysAllocatePostCopyWorkItem <PERF> (sys32v+0xc):
81f2800c ff              ???

逐步查找(enter),最终我们可以发现driver的入口点.这个过程其实是非常慢的,因为系统内核在加载驱动实际代码的过程中进行了N多次调用.如果我们本身有驱动的代码,也可以直接包含源代码路径,通过在实际代码中设置断点,让Windbg自己中断到相应的代码位置(在实际调试内核的过程中,这几乎是不可能的,因为你不会得到Windows内核或某个驱动程序的源代码.Linux系列的某些driver们又另当别论).这里为了方便,我包含了sys的源代码,增加断点直接走到DriverEntry例程:

kd> u 81f42780
sys32v!DriverEntry [隐藏了address]:
81f42780 8bff            mov     edi,edi
81f42782 55              push    ebp
81f42783 8bec            mov     ebp,esp
81f42785 51              push    ecx
81f42786 c745fc010000c0  mov     dword ptr [ebp-4],0C0000001h
81f4278d a1749cf481      mov     eax,dword ptr [sys32v!SysDbgFlags (81f49c74)]
81f42792 83e004          and     eax,4
81f42795 7424            je      sys32v!DriverEntry+0x3b (81f427bb)

其中显示的汇编代码,是内核调用驱动是进行的操作,其实也和实际代码相对应.

在driver代码中,如果要查看当前参数值,用dv命令:

kd> dv
   DriverObject = 0x84663730
   RegistryPath = 0x8084b560
         status = 8
       dontload = 0

另外,用"dt 参数名"可以看某个参数的当前值.

kd> dt DriverObject
Local var @ 0x81c05af8 Type _DRIVER_OBJECT*
0x84663730 
   +0x000 Type             : 4
   +0x002 Size             : 168
   +0x004 DeviceObject     : (null) 
   +0x008 Flags            : 2
   +0x00c DriverStart      : 0x81f28000 
   +0x010 DriverSize       : 0x27000
   +0x014 DriverSection    : 0x84230a68 
   +0x018 DriverExtension  : 0x846637d8 _DRIVER_EXTENSION
   +0x01c DriverName       : _UNICODE_STRING "\FileSystem\Sys"
   +0x024 HardwareDatabase : 0x81af6ed8 _UNICODE_STRING "\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM"
   +0x028 FastIoDispatch   : (null) 
   +0x02c DriverInit       : 0x81f4a005     sys32v!GsDriverEntry+0
   +0x030 DriverStartIo    : (null) 
   +0x034 DriverUnload     : (null) 
   +0x038 MajorFunction    : [28] 0x8189a5c1     nt!IopInvalidDeviceRequest+0

这样,我们就可以通过上述的这些命令,逐步分析一个驱动程序在加载和执行过程中的情况。另外,Windbg还有众多内核调试命令,如!irp可以查看一个对象的数据结构,!devobj可以查看设备对象等,在今后的操作系统内核学习过程中会不断用到这些命令。

从上面的操作过程我们可以看出,利用Windbg调试驱动程序,或者说进行内核调试,是非常方便的。如果我们对Windows内核有一定的了解,同时拥有一定汇编语言的功底,就可以有Windbg进行简单的系统排障(比如系统加载是出现蓝屏,或是某个系统模块出现问题)、驱动学习等。同时,这个过程也可以让我们更深入的理解操作系统原理。另外,Windbg也可以进行系统服务(service)的调试,这就是User mode的调试过程了。

2、

3、

转载于:https://www.cnblogs.com/DriverSkill/p/6209909.html

物理机_双机调试_资料相关推荐

  1. c语言编程流水灯与交通灯实验,C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟.doc...

    C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟 学 号: 班 级: 自动化10班 姓 名: 张 指导老师: 胡 2012.12 单片机核心板实验要求 流水灯实验 实验目的: 简单I/O引 ...

  2. VMware虚拟网卡导致物理机浏览器DNS解析慢_浏览器正在解析主机

    文章目录 问题描述 解决办法 问题描述 开启VMware的虚拟网卡后,物理机浏览器打开网页用时变长,卡在"正在解析主机" 解决办法 根源还是网卡配置问题,最暴力的办法就是直接禁用, ...

  3. spyder上怎样将figure框出来_怎样将数据中心现有的物理机和虚拟机平滑的迁移到云平台上?...

    怎样将数据中心现有的物理机和虚拟机平滑的迁移到云平台上?风险和工作量怎样评估?成熟的产品怎样选型? 某信系统集成公司 技术总监: 首先要有一个正确的理解,你要迁移不是几个虚机和物理机,而是一个或者多个 ...

  4. linux查看网卡物理编号_关于如何查看多网卡物理机中网卡序号与物理网卡的对应该关系...

    做软件开发的人都知道:接触真正底层系统驱动的的机会很少(做网络驱动的除外哦),上周和同事一起在一块物理机的办卡上安装centerOS6.5(至于为啥安装6.5版本的,只能说厂商要求的),遇到了一个持续 ...

  5. as真机调试_如何使用真机调试android程序

    展开全部 第一步:将我们开发所用的Android真机的USB调试功能打开(打开方法为Settings(设置32313133353236313431303231363533e59b9ee7ad94313 ...

  6. 将 打包为 物理机 虚拟机镜像_(完整版)十个步骤将操作系统从物理机迁移到虚拟机...

    老板让你在很短的时间里执行一项操作系统迁移的任务,此时,如果你有一个功能完整的且经过测试的物 理机到虚拟机迁移的解决方案,那么你将是一个真正的英雄! P2V 的解决方案可以使你在不影响生产网络 或不重 ...

  7. 计算机word文档无法工作,word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料)...

    word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料),哪吒游戏网给大家带来详细的word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料) ...

  8. 中职计算机应用基础笔记,计算机应用基础_自考笔记+自考资料.doc

    计算机应用基础_自考笔记自考资料 科目:计算机应用基础 第一章计算机基础知识 一.单项选择题 1.微电子技术的迅速发展成为计算机发展过程的技术基础的是(D)A.第一代计算机B.第二代计算机C.第三代计 ...

  9. 硬盘对拷必备 AGE USB/eSATA对拷机现卖场!_青岛行情-中关村在线

    硬盘对拷必备 AGE USB/eSATA对拷机现卖场!_青岛行情-中关村在线 硬盘对拷必备 AGE USB/eSATA对拷机现卖场!_青岛行情-中关村在线 硬盘对拷必备 AGE USB/eSATA对拷 ...

最新文章

  1. [ARM-assembly]-A64指令集合总结
  2. windows服务器部署jar包
  3. CF986A Fair
  4. flutter刷新页面_用Flutter实现58App的首页
  5. 计算机考试可以带首饰吗,高考时不许考生戴框架眼镜?“无声考场”有新规,考生别忽视...
  6. UML--行为图(状态图、活动图)
  7. php 读取excel转数组中,php读取Excel中内容到数组
  8. mix2线刷开发板救砖_小米MIX2官方原厂系统rom线刷刷机包降级包下载8.10.25版
  9. 区分 Linux 的硬链接与软链接
  10. 先验 超验_关于先天、先验、经验和超验的理解
  11. 安全管理实务之四:口令管理(转)
  12. 一行代码就能随意修改网页内容
  13. 外贸企业如何选ERP管理软件
  14. idea通过maven使用docker插件生成镜像并推送到harbor仓库
  15. 前端H5各种qq,微博,fb,whatsapp等网页分享的链接
  16. 猿圈 题库_猿圈帮企业“测评”程序员
  17. HLOJ 2026 猴子吃桃
  18. 你知道吗?除了迅雷,这几款下载神器也不错!
  19. 网课视频禁止倍速和快进
  20. mysql还原.bak文件

热门文章

  1. 一个与生命起源有关的悖论终于得到了解决
  2. 一文读懂产业互联网的前世今生!
  3. 2018全球最强物联网公司榜单揭晓|20家企业物联网战略大起底!
  4. 盘点丨2017年亚洲新晋18家独角兽公司
  5. 写代码时发现......还是 SpringBoot 牛逼!一篇拿下
  6. 时隔四年回归的澎湃芯片,能为雷军赌上一生荣耀的造车创业带来什么?
  7. 41 岁的黄峥辞任拼多多董事长一职,未来将投身于科学研究!
  8. 从 ACM 训练领悟坚持之道
  9. 让看不见的AI算法,助你拿下看得见的广阔市场
  10. SAP S/4HANA CDS View的访问控制实现:DCL介绍