教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

Win32调试API原理

来源:网络收集 时间:2026-04-07
导读: Win32调试API原理 在Win32中自带了一些API函数,它们提供了相当于一般调试器的大多数功能,这些函数统称为Win32调试API(Win32 Debug API)。利用这些API可以做到加载一个程序或捆绑到一个正在运行的程序上以供调试;可以获得被调试的程序的底层信息,例如进

Win32调试API原理

在Win32中自带了一些API函数,它们提供了相当于一般调试器的大多数功能,这些函数统称为Win32调试API(Win32 Debug API)。利用这些API可以做到加载一个程序或捆绑到一个正在运行的程序上以供调试;可以获得被调试的程序的底层信息,例如进程ID、进入地址、映像基址等;甚至可以对被调试的程序进行任意的修改,包括进程的内存、线程的运行环境等。

简而言之,读者可以用这些API写一个进程调试器。就像现在流行的调试器Visual C++调试器、WinDBG、OllyDbg等一样。当然除了能写调试器外,利用调试API还能做很多不同寻常的工作。

3.1 Win32调试API原理

3.1.1 调试相关函数简要说明

Windows提供了一组Win32 Debug API,其具体定义如下。 (1)ContinueDebugEvent函数

说明:此函数允许调试器恢复先前由于调试事件而挂起的线程。 语法:BOOL

ContinueDebugEvent(DWORD dwProcessId,DWORD dwThreadId, DWORD dwContinueStatus ) 参数:

dwProcessId DWORD 被调试进程的进程标识符 dwThreadId DWORD 欲恢复线程的线程标识符

dwContinueStatus DWORD 此值指定了该线程将以何种方式继续,包含两个定义值DBG_CONTINUE和DBG_EXCEPTION_NOT_HANDLED

返回值 BOOL 如果函数成功,则返回非零值;如果失败,则返回零

(2)DebugActiveProcess

说明:此函数允许将调试器捆绑到一个正在运行的进程上。 语法:BOOL DebugActiveProcess(DWORD dwProcessId ) 参数:

dwProcessId DWORD 欲捆绑进程的进程标识符

返回值 BOOL 如果函数成功,则返回非零值;如果失败,则返回零 (3)DebugActiveProcessStop

说明:此函数允许将调试器从一个正在运行的进程上卸载。 语法:BOOL DebugActiveProcessStop(DWORD dwProcessId )

参数:

dwProcessId DWORD 欲卸载的进程的进程标识符

返回值 BOOL 如果函数成功,则返回非零值;如果失败,则返回零 注意:Windows 9x内核不支持此函数。 (4)DebugBreak

说明:在当前进程中产生一个断点异常,如果当前进程不是处在被调试状态,那么这个异常将被系统例程接管,多数情况下会导致当前进程被终止。 语法:VOID DebugBreak(VOID) 参数:无

其他:其实这个函数的用处与在程序中直接插入INT 3的效果是一样的,如果反编译Windows 98的KERNEL32.dll,读者可以发现这个函数只包含两句,一句是INT 3,一句是RET。

(5)DebugBreakProcess

说明:在指定进程中产生一个断点异常。

语法:VOID DebugBreakProcess (HANDLE hProcess) 参数:

hProcess HANDLE 进程的句柄 返回值 无 (6)FatalExit

说明:此函数将使调用进程强制退出,将控制权转移至调试器。与ExitProcess不同的是,在退出前会先调用一个INT 3断点。 语法:VOID FatalExit(int ExitCode) 参数:

ExitCode int 退出码 返回值 无 (7)FlushInstructionCache 说明:刷新指令高速缓存。 语法:BOOL

FlushInstructionCache(HANDLE hProcess, LPCVOID lpBassAddress, SIZE_T dwSize) 参数:

hProcess HANDLE 进程的句柄

lpBassAddress LPCVOID 欲刷新区域的基地址 dwSize SIZE_T 欲刷新区域的长度

返回值 BOOL 如果函数成功,则返回非零值;如果失败,则返回零 (8)GetThreadContext

说明:获取指定线程的执行环境。

语法:BOOL GetThreadContext(HANDLE hThread, LPCONTEXT lpContext ) 参数:

hThread HANDLE 欲获取执行环境的线程的句柄 lpContext LPCONTEXT 指向CONTEXT结构的指针

返回值 BOOL 如果函数成功,则返回非零值;如果失败,则返回零 (9)GetThreadSelectorEntry

说明:此函数返回指定选择器和线程的描述符表的入口地址。 语法:BOOL

GetThreadSelectorEntry( HANDLE hThread,DWORD dwSelector, LPLDT_ENTRY lpSelectorEntry ) 参数:

hThread HANDLE 包含指定选择器的线程的句柄 dwSelector DWORD 选择器数目

lpSelectorEntry LPLDT_ENTRY 指向用来接收描述符表的结构的指针

返回值 如果函数成功,则返回非零值,此外lpSelectorEntry指向的结构中将被填入接收到的描述符表;如果失败,则返回零 (10)IsDebuggerPresent

说明:此函数用来判断调用进程是否处于被调试环境中。 语法:BOOL IsDebuggerPresent(VOID) 参数:

返回值 BOOL:如果进程处在被调试状态,则返回非零值,不是处在被调试状态则返回零

(11)OutputDebugString

说明:将一个字符串传递给调试器显示。

语法:VOID OutputDebugString(LPCYSTR lpOutputString) 参数:

lpOutputString LPCYSTR:指向要显示的以“00”结尾的字符串的指针 返回值 无 (12)ReadProcessMemory

说明:读取指定进程的某区域内的数据。 语法:BOOL

ReadProcessMemory(HANDLE hProcess, LPCVOID lpBassAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesRead) 参数:

hProcess HANDLE 进程的句柄

lpBassAddress LPCVOID 欲读取区域的基地址 lpBuffer LPVOID 保存读取数据的缓冲的指针 nSize SIZE_T 欲读取的字节数

lpNumberOfBytesRead SIZE_T 存储已读取字节数的地址指针

返回值 BOOL:如果函数成功,则返回非零值;如果失败,则返回零 (13)SetThreadContext 说明:设置指定线程的执行环境。

语法:BOOL SetThreadContext(HANDLE hThread, LPCONTEXT lpContext ) 参数:

hThread HANDLE 欲设置执行环境的线程的句柄 lpContext LPCONTEXT 指向CONTEXT结构的指针

返回值 BOOL:如果函数成功,则返回非零值;如果失败,则返回零 (14)WaitForDebugEvent

说明:此函数用来等待被调试进程发生调试事件。 语法:BOOL

WaitForDebugEvent(LPDEBUG_ENENT lpDebugEvent, DWORD dwMilliseconds) 参数:

lpDebugEvent LPDEBUG_ENENT 指向接收调试事件信息的DEBUG_ ENENT结构的指针

dwMilliseconds DWORD 该函数用来等待调试事件发生的毫秒数,如果这段时间内没有调试事件发生,函数将返回调用者;如果将该参数指定为INFINITE,函数将一直等待直到调试事件发生

返回值 BOOL:如果函数成功,则返回非零值;如果失败,则返回零 (15)WriteProcessMemory

说明:在指定进程的某区域内写入数据。 语法:BOOL

WriteProcessMemory(HANDLE hProcess, LPCVOID lpBassAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesRead) 参数:

…… 此处隐藏:2982字,全部文档内容请下载后查看。喜欢就下载吧 ……
Win32调试API原理.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/442529.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)