为什么我在0x7c90120e处获得断点异常?

时间:2013-09-13 14:11:11

标签: windows debugging internals

我正在Windows上编写调试器。我用它调试了这个无用的汇编代码:

    global _start
section .text
_start:
    mov eax, 1
    mov ebx, 2
    mov ecx, 3
    mov edx, [myVar]
    push 0
    hlt
section .data
    myVar dw 1234h

当然它会在hlt崩溃。

我在控制台上编写调试事件,在运行并继续两次后,我有这些:

Process created.
DLL loaded: ntdll.dll
DLL loaded: C:\WINDOWS\system32\kernel32.dll
Exception happened.
First chance exception.
>>> 0x7c90120e EXCEPTION_BREAKPOINT
Exception happened.
First chance exception.
>>> 0x00401017 EXCEPTION_PRIV_INSTRUCTION
Exception happened.
First chance exception.
>>> 0x00401017 EXCEPTION_PRIV_INSTRUCTION

现在问题是,为什么我得到断点异常?我希望只为特权指令获得例外。

1 个答案:

答案 0 :(得分:3)

Windows调试API在连接调试器后始终会注入断点异常。这会暂停调试的应用程序,并为调试器提供访问应用程序的机会,并进行所需的任何初始化。

来自DebugActiveProcess文档:

  

系统安排进程中的第一个线程执行a   恢复后的断点指令。继续这个线程导致   它返回到调试器之前做同样的事情   附接。