我正在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
现在问题是,为什么我得到断点异常?我希望只为特权指令获得例外。
答案 0 :(得分:3)
Windows调试API在连接调试器后始终会注入断点异常。这会暂停调试的应用程序,并为调试器提供访问应用程序的机会,并进行所需的任何初始化。
来自DebugActiveProcess文档:
系统安排进程中的第一个线程执行a 恢复后的断点指令。继续这个线程导致 它返回到调试器之前做同样的事情 附接。