如何删除断点ntdll!DbgBreakPoint+;WinDbg中的0x1
我正在调试一个程序,该程序将WinDbg设置为我的事后调试器,正在崩溃。我已在地址77f7f571处设置了断点。当它被触发时,我通常会得到以下结果:如何删除断点ntdll!DbgBreakPoint+;WinDbg中的0x1,windbg,Windbg,我正在调试一个程序,该程序将WinDbg设置为我的事后调试器,正在崩溃。我已在地址77f7f571处设置了断点。当它被触发时,我通常会得到以下结果: *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\System32\ntdll.dll - ntdll!DbgBreakPoint+0x1: 然后我按照你的指示做了,现在我才明白 ntdll!DbgBreakPoint+0
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\System32\ntdll.dll -
ntdll!DbgBreakPoint+0x1:
然后我按照你的指示做了,现在我才明白
ntdll!DbgBreakPoint+0x1:
我想删除此断点,但无法将其列出或删除。bl和bc或bd都没有输出:
0:002> bl
0:002> bc *
0:002> bd *
这不是基于行的断点,但看起来像是对
DebugBreak()
的手动调用,类似于以下程序:
#include "stdafx.h"
#include "windows.h"
int _tmain()
{
DebugBreak();
return 0;
}
在内部,该方法将抛出异常。要控制WinDbg是否因异常而停止,请使用sxe bpe
停止,并使用sxi bpe
忽略异常
若要尝试此操作,请编译上述应用程序并在WinDbg(Ctrl+E)下运行它。在初始断点处,接管控制:
(1c2c.6a8): Break instruction exception - code 80000003 (first chance)
eax=00000000 ebx=00000000 ecx=779d0000 edx=0020e218 esi=fffffffe edi=00000000
eip=773e12fb esp=0038f9e8 ebp=0038fa14 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrpDoDebuggerBreak+0x2c:
773e12fb cc int 3
0:000> sxe bpe; g
(1c2c.6a8): Break instruction exception - code 80000003 (first chance)
*** WARNING: Unable to verify checksum for DebugBreak.exe
eax=cccccccc ebx=7efde000 ecx=00000000 edx=00000001 esi=0038fd44 edi=0038fe10
eip=74d5322c esp=0038fd40 ebp=0038fe10 iopl=0 nv up ei pl nz na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000206
KERNELBASE!DebugBreak+0x2:
74d5322c cc int 3
0:000> g
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=77442100 edi=774420c0
eip=7735fd02 esp=0038fd78 ebp=0038fd94 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!ZwTerminateProcess+0x12:
7735fd02 83c404 add esp,4
完成此实验后,键入。重新启动。然后使用sxi bpe
重复该实验:
(109c.1c1c): Break instruction exception - code 80000003 (first chance)
eax=00000000 ebx=00000000 ecx=be9e0000 edx=0009e028 esi=fffffffe edi=00000000
eip=773e12fb esp=002ff890 ebp=002ff8bc iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrpDoDebuggerBreak+0x2c:
773e12fb cc int 3
0:000> sxi bpe; g
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=77442100 edi=774420c0
eip=7735fd02 esp=002ffc20 ebp=002ffc3c iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!ZwTerminateProcess+0x12:
7735fd02 83c404 add esp,4
正如您所看到的,WinDbg并没有停止在KERNELBASE!DebugBreak+0x2
由于该异常而不再出现。这是一个硬编码断点,而不是调试器断点。有人调用了DebugBreak
,意思是“强制中断调试器”。我是新创建的VM上唯一的一个,所以我做了任何事情都是由我做的。我很确定我用bp 77f7f571添加了这个,然后我导致了访问冲突,崩溃的程序启动了调试器。现在我知道你的意思了。我安装了一个新的虚拟机,发现这个新安装也没有ntdll!DbgBreakPoint+0x1:,因此程序本身正在捕获问题并调用ntdll.dll。谢谢