Chinaunix首页 | 论坛 | 博客
  • 博客访问: 446155
  • 博文数量: 63
  • 博客积分: 1175
  • 博客等级: 少尉
  • 技术积分: 1204
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-19 11:33
文章分类
文章存档

2015年(1)

2014年(3)

2013年(7)

2012年(52)

分类: Python/Ruby

2012-04-19 12:37:02

   前两篇我们已经说过了进程的加载以及查看寄存器中的信息,这篇我们说一下如何处理调试事件。
   首先回顾一下第1篇提到的函数WaitForDebugEvent()的调用方式,第一个参数是个结构体指针,指向的结构体为DEBUG_EVENT,第二个参数设置为INFINITE(0XFFFFFFFF),当有调试事件发生时,函数将以参数传值的形式返回一个更新过的DEBUG_EVENT结构体。我们可以以这个结构体中的信息作为我们进行事件处理的决策依据。
  
    typedef  struct  DEBUG_EVENT{
       DWORD   dwDebugEventCode;
       DWORD   dwProcessId;
       DWORD   dwThreadId;
       union{
           EXCEPTION_DEBUG_INFO    Exception;
           CREATE_THREAD_DEBUG_INFO  CreateThread;
           CREATE_PROCESS_DEBUG_INFO  CreateProcessInfo;
           EXIT_THREAD_DEBUG_INFO  ExitThread;
           EXIT_PROCESS_DEBUG_INFO  ExitProcess;
           LOAD_DLL_DEBUG_INFO LoadDll;
           UNLOAD_DLL_DEBUG_INFO  UnloadDLL;
           OUTPUT_DEBUG_STRING_INFO   DebugSting;
           RIP_INFO   RipInfo;
           }u;
    }
 
  其中dwDebugEventCode将是我们首要关注对象,他可以告诉我们函数WaitForDebugEvent()所捕获到的时间的确切类型,这个变量的值同时也决定了我们将以何种方式来诠释联合体u的形态和取值。
   
   通过检测dwDebugEventCode的值,我们可以将此事件的类型与联合体u中的某一成员对应起来,从联合体u中各成员变量的命名方式我们不难看出这两者之间的对应关系。
   例如:
阅读(1632) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~