调试功能

【勇芳软件工作室】汉化HomePreviousNext

虽然大多数Windows调试功能都用于创建调试器,但是在调试过程中设计了多个功能。

要启动一个进程并进行调试,调试器必须使用CreateProcess,如上一节所述。

要调试已执行的进程,调试器应使用DebugActiveProcess检索到的进程标识符DebugActiveProcess.DebugActiveProcess将调试器附加到活动进程。在这种情况下,只能调用活动进程;它的子进程不行。调试器必须具有对执行过程的适当访问权限才能使用DebugActiveProcess.有关访问权限的更多信息,请参阅安全.

在调试器已经创建或附加到其打算调试的进程之后,内核会通知调试器在进程中发生的所有调试事件,以及在任何子进程中指定的调试事件。有关调试事件的更多信息,请参阅调试事件.

调试器在其主循环开始时使用WaitForDebugEvent函数。此函数将阻止调试器,直到发生调试事件。当调试事件发生时,系统将暂停正在调试的进程中的所有线程,并通知调试器事件。调试器可以调用SetDebugErrorLevel函数来设置Windows将调试事件传递给它的最小错误级别。

调试器可以通过使用GetThreadContextGetThreadSelectorEntryReadProcessMemorySetThreadContextWriteProcessMemory函数与用户进行交互或操纵被调试进程的状态。GetThreadSelectorEntry返回指定选择器和线程的描述符表条目。调试器使用描述符表条目将片段相对地址转换为线性虚拟地址。ReadProcessMemoryWriteProcessMemory功能需要线性虚拟地址。

调试器经常读取被调试的进程的内存,并将包含指令的内存写入指令高速缓存。写入指令后,调试器调用FlushInstructionCache来执行缓存指令。

调试器在其主循环结束时使用ContinueDebugEvent函数。此函数允许正在调试的进程继续执行。