当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

Win32调试接口计划与实现浅析[VC/C++编程]

赞助商链接



  本文“Win32调试接口计划与实现浅析[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

所谓调试器实际上是一个很广泛的概念,但凡可以以某种情势监控其他程序履行历程的程序,都可以泛称为调试器.在Windows平台上,按照调试器的实现原理大约可以将之分为三类:内核态调试器、用户态调试器和伪代码调试器.

内核态调试器直接工作在操作系统内核一级,在硬件与操作系统之间针对系统核心或驱动举行调试,常见的有SoftICE、WinDbg、WDEB386和i386KD等等;用户态调试器则通过操作系统供应的调试接口,在操作系统和用户态程序之间针对用户态程序举行调试,常见的有各种开辟环境如VC/Delphi自带的调试器,OllyDbg等等;伪代码调试器则利用目标系统自定义的调试接口,调试由用户态程序支持的脚本语言或虚拟机代码,常见的如JVM/CLR的调试工具、VB的pcode调试器、Active Script调试器等等.

因为伪代码调试器跟具体系统实现相关性太强,不具有原理层面的通用性,本系列文章尽大概不触及其内容,今后假若有机会可以再谈论一下JVM/CLR/Active Script供应的调试接口;用户态调试器利用最遍及,参考资料也较为完好,我会花较大精神和大家探究;核心态调试器则跟操作系统结合较为精密,加上我也不是太熟习,只能极力而为了,呵呵.欢送大家提出批判指正看法和倡议 :)

此外激烈举荐John Robbins在MSDN的Bugslayer专栏,以及其所著的<Debugging Applications>一书(中文版《利用程序调试技术》),此书中对换试器从原理到利用都有很全面的讲授.

[1] 用户态调试器构造初探

用户态调试器直接利用Win32 API供应的调试接口,遵守Win32的事件驱动的计划思惟,其实现思绪非常简单,基本框架伪代码以下:

以下为引用?lt;/B>
//启动要调试的进程或挂接调试器到已运行的进程上
CreateProcess(..., DEBUG_PROCESS, ...) or DebugActiveProcess(dwProcessId)
DEBUG_EVENT de;
BOOL bContinue = TRUE;
DWORD dwContinueStatus;
while(bContinue)
{
bContinue = WaitForDebugEvent(&de, INFINITE);
switch(de.dwDebugEventCode)
{
...
default:
{
dwContinueStatus = DBG_CONTINUE;
break;
}
}
ContinueDebugEvent(de.dwProcessId, de.dwThreadId, dwContinueStatus);
}

在调试器开始调试的时刻,会启动被调试程序的新进程大概挂接(attach)到一个已运行进程上,此时Win32系统会启动调试接口的服务器端;然后调试器调用WaitForDebugEvent函数等候调试服务器端的调试事件被引发;调试器按照调试事件举行呼应的处理;最后调用ContinueDebugEvent函数恳求调试服务器持续履行被调试进程,以等候并处理下一个调试事件.

首先我们大致看看调试接口的服务器端的实现思绪:调试服务的服务器端接口实际上是存在于被调试进程的调试端口(Debug Port),此核心对象实现上跟Win32的完成端口近似,都是通过一个核心行列实现的LPC端口.启动调试服务器实际上就是挂接Win32的调试子系统到被调试进程,并在被调试进程内构造调试端口.调试器通过调试端口与Win32的调试子系统通讯;调试子系统呼应系统操作所引发的调试事件,并通过调试端口将调试事件分发给核心态/用户态调试器.

成立被调试程序的新进程时,需求在CreateProcess函数的dwCreationFlags参数设置DEBUG_ONLY_THIS_PROCESS或DEBUG_PROCESS标志位,以表示新建的进程需求被调试.CreateProcess函数的调用处径以下

以下为引用:
CreateProcessA/CreateProcessW (kernel32.dll)
CreateProcessInternalW (kernel32.dll)
NtCreateProcessEx (ntoskrnl.dll)
PspCreateProcess (ntos\ps\create.c:969)


  以上是“Win32调试接口计划与实现浅析[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • IIS配置PHP呈现1%不是有效WIN32利用程序
  • <b>nginx win32 版本静态文件测试 (Windows环境)</b>
  • Win32版与Unix版MySQL对比
  • Win32平台下运行的Mysql的一些特点
  • com.ms.win32包
  • JDK1.4下实现访谒WIN32注册表
  • 令Win32利用程序跳入系统零层
  • Win32Asm教程
  • Win32下两种用于C++的线程同步类(下)
  • <b>Win32下两种用于C++的线程同步类(上)</b>
  • 深化浅出Win32多线程程序计划综合实例
  • Win32调试接口计划与实现浅析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .