Debugging 使用内核调试器在64位操作系统上调试32位应用程序

Debugging 使用内核调试器在64位操作系统上调试32位应用程序,debugging,windbg,postmortem-debugging,Debugging,Windbg,Postmortem Debugging,我有以下情况: 我已将内核调试器(Windbg)连接到运行Windows 10 64位的Hyper-V计算机上。 我要调试的进程是一个32位用户模式进程,它有时会挂起机器(它与一个微型过滤器通信),因此我不能使用用户模式调试器或远程调试器 现在我有了一个symbols服务器,我知道了我要调查的流程和线程,如何: 仅查看此线程的调用堆栈 为我的模块加载符号 奖金问题:出于某种原因,我有很多我的程序实例。除“活动”线程外,其余线程在Process Explorer中不可见,没有线程,句柄计数为0。这

我有以下情况:

我已将内核调试器(Windbg)连接到运行Windows 10 64位的Hyper-V计算机上。 我要调试的进程是一个32位用户模式进程,它有时会挂起机器(它与一个微型过滤器通信),因此我不能使用用户模式调试器或远程调试器

现在我有了一个symbols服务器,我知道了我要调查的流程和线程,如何:

  • 仅查看此线程的调用堆栈
  • 为我的模块加载符号

  • 奖金问题:出于某种原因,我有很多我的程序实例。除“活动”线程外,其余线程在Process Explorer中不可见,没有线程,句柄计数为0。这是什么原因造成的

    我尝试过的事情:

    !process ffffe08620a30800 7
    (view all process threads)
    ...
           THREAD **ffffe0862212f800**  Cid 08a0.1cfc  Teb: 0000000000d6e000 Win32Thread: 0000000000000000 RUNNING on processor 0
            Not impersonating
            DeviceMap                 ffffcb0a55817c30
            Owning Process            ffffe08620a30800       Image:         avguard.exe
            Attached Process          N/A            Image:         N/A
            Wait Start TickCount      27338460       Ticks: 1 (0:00:00:00.015)
            Context Switch Count      2999214        IdealProcessor: 0             
            UserTime                  **00:17:51.125**
            KernelTime                00:06:14.671
            Win32 Start Address 0x00000000741bbfb4
            Stack Init ffffb481db842dd0 Current ffffb481db842a10
            Base ffffb481db843000 Limit ffffb481db83d000 Call 0
            Priority 8 BasePriority 8 UnusualBoost 0 ForegroundBoost 0 IoPriority 2 PagePriority 5
            Child-SP          RetAddr           : Args to Child                                                           : Call Site
            ffffb481`db842c40 00000000`77b1222c : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceExit+0x2f (TrapFrame @ ffffb481`db842c40)
            00000000`0333ed18 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : wow64cpu!CpupSyscallStub+0xc
    ...
    
    这是我想调查的线索。它的处理器使用率很高,以粗体显示:用户时间:17分钟。但是,堆栈没有帮助。 然后我做了:

    .thread /p /r /w ffffe0862212f800
    Implicit thread is now ffffe086`2212f800
    Implicit process is now ffffe086`20a30800
    .cache forcedecodeuser done
    Loading User Symbols
    .ModLoad: 00000000`009b0000 00000000`00a25000   C:\Program Files (x86)\my process.exe
    .ModLoad: 00007ffb`67e20000 00007ffb`67ff1000   C:\WINDOWS\SYSTEM32\ntdll.dll
    .ModLoad: 00000000`778d0000 00000000`77922000   C:\WINDOWS\System32\wow64.dll
    .ModLoad: 00000000`77850000 00000000`778c7000   C:\WINDOWS\System32\wow64win.dll
    .ModLoad: 00000000`77b10000 00000000`77b1a000   C:\WINDOWS\System32\wow64cpu.dll
    
    The context is partially valid. Only x86 user-mode context is available.
    x86 context set
    1: kd:x86> kb
      *** Stack trace for last set context - .thread/.cxr resets it
    ChildEBP          RetAddr           Args to Child                                         
    WARNING: Frame IP not in any known module. Following frames may be wrong.
    db842cc0 00000000 00000000 00000000 00000000 **0x819613ca**
    
    这个地址是什么0x819613ca? 如何提取此模块所属的模块?或者提取一个有意义的完整调用堆栈?
    我现在如何进一步调查?

    “我有许多程序实例”-你是说你有许多内核进程对象吗?它们可能很旧,等待重用。这是可能的,但为什么只针对我的进程?这与Linux中的类似。可能有人仍然持有对这些
    e过程的引用。您说过句柄计数为零,但指针计数不是。(如果IRP未完成或被取消,也可能发生这种情况,在其他情况下也可能发生。)要获得用户模式进程的符号,您需要启用一个名为或
    ksl
    (内核符号加载)的GlobalFlag。你启用了吗?如果没有,请尝试执行,然后重新加载/user
    。另一方面,我看到了.ModLoad事件,所以我不确定这是问题所在。。。