7. win32调试API

一、前言

相比于上一章,本章的内容就稍微有意思一点了,因为可以直接上手使用。

本文要介绍的时win32 api中提供的一系列用于调试的api,比如vs中为什么能打断点调试程序?x64dbg为什么能让程序运行的时候暂停下来?其很大程度上就依赖于这些api。

二、API概述

常用的调试API大概有以下几个:

如果有兴趣的可以自行点击前往官方文档研究研究如何使用,后续逆向实战我也会使用一下这些函数。

三、调试事件

调试器的作用就是监视目标进程的执行、并对其发出的每一个调试事件做出应有的反应。

一旦目标进程发生了一个调试事件,那么系统就会通知调试器来处理这个事件,调试器就可以通过WaitForDebugEvent函数来获取目标进程的相关环境信息。

也就是这个函数第一个参数返回的值,更多内容可以查看官方文档: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  DebugString;
    RIP_INFO                  RipInfo;
  } u;
} DEBUG_EVENT, *LPDEBUG_EVENT;

其中dwDebugEventCode属性就标识了当前发生的调试事件类型,而dwProcessId是目标进程的id,dwThreadId是目标线程的id。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux