Articles of windbg

Windows x64(侵入式)单一链接列表

我目前正试图绕过一些Windows旁观列表,我看到一些内存地址让我感到困惑。 从我发布的另一个问题,一些代码被生成,感谢sergmat ( 原始问题 ): lkd> !lookaside iopsmallirplookasidelist Lookaside "" @ 82d5ffc0 "Irps" …. lkd> dt _SINGLE_LIST_ENTRY 82d5ffc0 nt!_SINGLE_LIST_ENTRY +0x000 Next : 0x86737e30 _SINGLE_LIST_ENTRY …. lkd> !pool 0x86737e30 Pool page 86737e30 region is Nonpaged pool *86737e28 size: a0 previous size: 48 (Allocated) *Irp Pooltag Irp : Io, IRP packets 从上面的WinDBG输出中可以看出,基本上是在地址0x82d5ffc0处有一个单独的链表。 此输出是在32位Windows 7系统上生成的。 不过,在Windows 7 64位系统上执行相同操作时,这是我感到困惑的地方,这是输出(地址明显不同): […]

是否有必要在内核模式驱动程序中设置一个断点来debugging其用户模式计数器部分(使用Windbg)function?

我使用Windbg来debugging我的用户模式驱动程序(考虑USB)。 我的驱动程序包(debugging版本,64位)同时具有内核模式和用户模式代码。该软件包已成功安装在我的目标机器中,并且模块也已加载(因为我可以使用windbg-command进行validation:'lm “)。 我在主机上以Admin模式运行Windbg,并使用1394火线卡debugging目标。 在开始应用程序之后,当我尝试在用户模式驱动程序中debugging一个函数时,我发现虽然断点已被正确设置和使能,但是打算的function没有受到影响。 然后我在内核代码中设置一个函数的断点(一个经常被启用的重复服务程序)。 这次这个内核模式驱动函数被打入,有时候上面的用户模式驱动函数也打破了,我可以debugging一下,然后按照代码path。 同样,当我closures并重新启动应用程序时,只有当内核模式驱动程序function断点被启用并命中时,才会触发用户模式驱动程序function。 但是,如果其禁用,则用户模式驱动程序function不会被触发。 发生这种情况与我们在内核模式或用户模式驱动程序上设置断点的function无关。 为什么这个行为,虽然模块正确加载? 我是否需要configuration或确定一些东西,以便在启动应用程序时,我不需要依赖内核模式部分?

已解决 – 窗口的user32.dll 64位的translatemessage()api引发的第一次机会exception

User32.dll的TranslateMessage()API引发exception。 当我尝试使用windbg命令中的!analyze -v来分析exception时,我得到以下信息。 任何人都可以帮助我解码错误 FAULTING_IP: +0 ffffffff`e85b6720 ?? ??? EXCEPTION_RECORD: ffffffffffffffff — (.exr 0xffffffffffffffff) ExceptionAddress: ffffffffe85b6720 ExceptionCode: c0000005 (Access violation) ExceptionFlags: 00000000 NumberParameters: 2 Parameter[0]: 0000000000000008 Parameter[1]: ffffffffe85b6720 Attempt to execute non-executable address ffffffffe85b6720 FAULTING_THREAD: 000000000000642c DEFAULT_BUCKET_ID: WRONG_SYMBOLS PROCESS_NAME: CapGM.exe ADDITIONAL_DEBUG_TEXT: You can run '.symfix; .reload' to try to fix the symbol path and load […]

为什么eclipsedebugging器只显示1或2行的堆栈,然后是0x0?

在Linux上,我得到很好,健康,完整的堆栈跟踪。 然而,在Windows上,当发生崩溃时(比如segfault违例),我只能得到栈顶的一两行,然后是条目0x0(我无法展开)。 这使得debugging非常困难

需要帮助来了解内核debugging错误

需要帮助来了解内核debugging错误。 当我把我的驱动程序的Whcktesting的Windows 8(32/64位),它失败CHAOS在运行testing 。 所以我做了内核debugging,并得到以下debuggingmessage.But我不明白在我的ioctl.c文件中的错误.Same驱动程序已经清除了Windows 7 32位的testing。 *** Fatal System Error: 0x0000000a (0x00000031,0x00000002,0x00000000,0x81CB1194) Break instruction exception – code 80000003 (first chance) A fatal system error has occurred. Debugger entered on first try; Bugcheck callbacks have not been invoked. A fatal system error has occurred. nt!RtlpBreakWithStatusInstruction: 818d6ca4 cc int 3 2: kd> !analyze -v Connected to […]

WinDbg会话variables – 别名与用户定义的伪寄存器

我需要在单个WinDbg会话的整个生命周期中保持一个特定的值(准确的说是一个string)。 原因是,我需要在WinDbg会话的整个生命周期的几个地方(通过.if语句,确切地说)来处理这个variables,而且我希望在会话启动时定义它 – 使用一个将被传递的论据。 它不能被定义或处理 – 我必须能够在debugging会话中的任何时候解决它,当然我不想冒这个风险,因为它可能被重新定义。 我正在考虑使用一个文件或共享内存,但我更喜欢用WinDbg脚本来解决这个问题。 如果可能的话,这显然是一个更优雅的解决scheme。 我已经在这方面做了一些在线阅读,问题是我找不到一个参考,其中的别名 (由aS命令定义 )和用户定义的伪寄存器 ( $t0..$t19范围内的寄存器)之间的差异$t0..$t19 ,这是通过使用r命令访问)进行了描述。 我无法真正理解每个用例。 在我看来, 别名是更好的select,因为它们可以被命名,相比之下, 用户定义的伪寄存器具有名称(不知道如何select“正确的”注册,以尽量减less可能与其他可能使用它的脚本发生冲突,或者根本没有任何区别)。 我在这里错过了什么? 在这种情况下我应该使用哪一个,还是他们不适合这种情况?

为什么加载程序捕捉在附加到进程时不起作用?

当我configurationGFlags在图像上显示加载程序捕捉MYEXE.exe并从windbg运行可执行文件时,我会在debugging窗口中获取加载程序捕捉输出。 但是,当我使用windbg附加到已经运行的进程时,我不这样做,即使在进程启动之前启用了加载程序捕捉。 当我不想从windbg开始的过程中连接到一个进程时,怎样才能使装载器捕捉工作?

如何将应用程序命中用户定义的断点时将WinDbgconfiguration为可选debugging器之一?

当我的机器上的应用程序遇到用户定义的中断点时,它会打开一个对话框,让我select一个debugging器附加到进程。 目前它提供给我select安装在我的机器上的两个版本的Visual Studio(2008或2010)之一,我想添加到选项WinDbg。 可能吗?

如何查看发布版本中的variables值

我希望能够在debugging发布应用程序时看到variables值。 我已经将编译器选项设置为Z7,并给定了/ DEBUG和/ PDB:链接器选项。 现在我有一个应用程序的pdb。 有了这个设置,我可以在代码中放置一个断点(Windbg),并且正确点击。 但是我无法看到variables值。 本地窗口只显示指针值,但我不能看到相同的内容。 例如,如果我有一个指向内部有一个int的结构的指针,它只显示指针的值。 如果通过单击树中的+来展开,我会看到variables名,其值为<Memory access error> 我应该如何让发布版本显示variables值?

ntkrpamp的本地内核符号无法正确加载到WinDbg中

我试图在WinXP SP3系统上debugging驱动程序问题。 但是,当我连接到debugging器时,我得到: *错误:无法find符号文件。 默认为导出ntkrpamp.exe的符号 我的主机是WinXP x64 SP2。 我的debugging版本是6.11.0001.404(AMD64)。 目标是WinXP x86 SP3。 当我运行“vertarget”时,我得到: Windows XP内核版本2600(Service Pack 3)MP(2个)自由x86兼容 产品:WinNt,套件:TerminalServer SingleUserTS 内置:2600.xpsp_sp3_gdr.100427-1636 我使用了'!sym noisy'来获得完整的符号加载输出。 当我尝试重新加载nt模块(没有正确加载的模块)时,它列出了它查找pdb文件的所有位置。 对于正确的文件所在的行(我安装了XP SP3免费的符号),它说: DBGHELP:e:\ symbols \ wxp_sp3_x86_fre \ exe \ ntkrpamp.pdb – 不匹配的pdb 这就是它告诉我的。 它没有说明为什么它不匹配。 我在这里错过了什么? 提前致谢。 注:连接到Microsoft的符号服务器不是一个选项。 主机在内联网上,不能连接到外部世界。 编辑:我能够通过重新安装目标机器来解决这个问题。 我知道目标有一些Windows更新安装,我怀疑其中之一使ntkrpamp.exe的符号过时。