草庐IT

c++ - Windbg 设置依赖于调用堆栈的条件断点

问题:我需要制作一个脚本或表达式,如果调用堆栈上某处是具有特定名称的函数,它不会中断。具体问题:如何将调用堆栈上的函数获取到字符串列表?示例:Module!MyFunctionWithConditionalBreakpointModule!Function1Module!Function2Module!Function3Module!MyFunctionWithConditionalBreakpointModule!Function1Module!ClassA:MemberFunctionModule!Function3我希望Module!MyFunctionWithCondition

c++ - Windbg:如何在 C++ 函数的重载之一上设置断点?

我有两个C++函数重载,我想在其中一个上设置断点:0:000>bumyexe!displayerrorMatched:00000000`ff3c6100myexe!displayError(int,HRESULT,wchar_t*)Matched:00000000`ff3c60d0myexe!displayError(int,HRESULT)Ambiguoussymbolerrorat'myexe!displayerror'哎呀,我可以在所有重载上设置断点,但似乎无法弄清楚如何:0:000>bumyexe!displayerror*Matched:00000000`ff3c6100my

windows - 使用 windbg 转储 EPROCESS

我正在试验LibVMI和Windows732位;为了正确设置,我需要查看EPROCESS结构的前8个字节(库在内存中搜索魔数(MagicNumber),应该就是它)。我的Windows-fu不强,所以谁能告诉我如何转储适当的内存位?我正在运行本地内核调试器,我已经得到了“dtnt!_EPROCESS”,但这似乎只是向我展示了结构的格式,而不是其中的实际内容。 最佳答案 命令是:dtnt!_EPROCESS您应该能够从!process07的输出中获取地址。 关于windows-使用wind

windows - 我如何计算出在内核调试 session 中使用 WinDBG 等待的事件

我是一个完全的WinDbg新手,我一直在尝试调试一个客户发给我的WindowsXP问题,我们的软件和一些第三方软件阻止Windows注销。我已经重现了这个问题,并验证了只有当我们的软件和客户的软件都安装了(虽然不一定在注销时运行)时才会出现注销问题。我观察到当用户尝试注销时WM_ENDSESSION消息没有到达正在运行的窗口,而且我知道第三方软件使用内核驱动程序。我一直在查看WinDbg中的进程,我知道csrss.exe通常会向所有窗口发送WM_ENDSESSION消息。当我跑的时候:!进程823560206查看csrss.exe的堆栈我可以看到:WARNING:FrameIPnoti

windows - 如何使用伪寄存器(如 $t1)作为 .writemem windbg 命令文件名的一部分

简而言之,我想创建一个断点,将部分内存保存到文件并继续,如下所示:bpmymodule!MyReader::issueRead+0x2e".writememC:\writemem\write_$t1rdxLr8;g"$t1是在其他断点递增的计数器。问题是$t1(或${$t1}未在文件名中解析,我以名为“write_$t1”的文件结尾 最佳答案 WinDbg的脚本总是有点老套。以下似乎有效,尽管我还没有将它应用于断点:aS/cfilename.printf"c:\\writemem\\write_%i",$t1;.block{.wri

c++ - windbg中 "Internal"输出中的 "!heap -h"是什么意思?

我正在关注这篇stackoverflow帖子Whatdothedifferentcolumnsinthe"!heap-flt-sxxxx"windbgcommandrepresent我正在尝试了解为其中一个占用大量内存的堆打印出的信息。我可以理解大部分专栏,但在我的windbg上,我看到了一个额外的专栏。我的大部分条目都标记为内部。我想知道那是什么意思。我已经完成了!gflags+ust。所以,我可以看到进行内存分配的调用堆栈。除了标记为Internal的条目外,我可以对大多数条目执行此操作。内部是什么意思?它与LFH的实现有关吗?如果这是LFH的内部实现,这些Internal堆条目将

windows - 我如何学习 WinDbg? (关于 : seemingly simple hung process)

我正在尝试确定进程挂起的原因,并且正在学习各种工具,例如ProcessExplorer,ProcessMonitor,和WinDbg.无论如何,我正在尝试使用WinDbg,在附加到我的进程后,调试器会这样说:(1e9c.1128):Breakinstructionexception-code80000003(firstchance)eax=7ffda000ebx=00000000ecx=00000000edx=77c5c964esi=00000000edi=00000000eip=77c18b2eesp=0543ff5cebp=0543ff88iopl=0nvupeiplzrnapen

c++ - 使用 WinDBG 识别有缺陷的函数

我已经从7.1WindowsSDK安装了WinDBG。然后用VC++2008我制作了一个程序“CleanPayload.exe”,它只包含一个“main”和一个故意包含缺陷的函数调用。它是一个包含调试符号的发布版本。我将该程序打开到WindDBG中,然后做了一个.sympath+来指示该程序的PDB所在的位置。做了一个ld*来加载所有符号做了一个lm来验证所有符号都已加载(我的程序的私有(private)符号,Windows库的公共(public)符号)。然后我运行了该程序,它抛出了第一次异常,这是意料之中的。如下:(910.12a0):WOW64breakpoint-code4000

windows - WinDbg 中的 "Break instruction exception"是什么?

我正在调试一些随机的崩溃错误,但实际上很难深入研究。因为当我打开故障转储时,只发现一个错误:0:000>.exr-1ExceptionAddress:00000000ExceptionCode:80000003(Breakinstructionexception)ExceptionFlags:00000000NumberParameters:0其实我没有在代码中设置任何硬代码断点,所以我在谷歌搜索这个异常,有人说这个异常可能是由堆损坏引起的。所以我的问题是,除了硬代码断点、调试时手动断点、堆损坏之外,是否还有其他原因导致此异常?另一个问题是,我尝试使用ApplicationVerifi

windows - 为什么 windbg 命令以 .或者 !

和.之间有什么区别吗?和!? 最佳答案 WinDbg中有不同种类的命令。常规命令,例如kb适用于调试session。例如。显示堆栈转储等元命令以点为前缀,例如.加载。元命令适用于调试器本身。例如。加载扩展、显示帮助等。扩展命令以感叹号为前缀,例如!analyze和!dumpheap在调试器扩展(提供附加功能的DLL)中定义。 关于windows-为什么windbg命令以.或者!,我们在StackOverflow上找到一个类似的问题: https://stack