Win32调试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字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




