调试器会有一个循环一直判断EventList有没有调试事件有就取出来处理。
调试器创建形式
- 关联调试器与被调试器进程
- 调试循环
每一种收集调试事件API都不一样,是因为它要收集调试事件的类型是不一样的。
这是异常要收集的调试事件
typedef struct _EXCEPTION_DEBUG_INFO {
EXCEPTION_RECORD ExceptionRecord;
DWORD dwFirstChance;
} EXCEPTION_DEBUG_INFO, *LPEXCEPTION_DEBUG_INFO;
这是创建线程要收集的调试事件
typedef struct _CREATE_THREAD_DEBUG_INFO {
HANDLE hThread;
LPVOID lpThreadLocalBase;
LPTHREAD_START_ROUTINE lpStartAddress;
} CREATE_THREAD_DEBUG_INFO, *LPCREATE_THREAD_DEBUG_INFO;
.....
.....
下面代码就类似拖拽程序到OD的框架。(W10记得以管理员身份运行VS)
#define dbgProcessName L"C:\\Users\\Administrator\\Desktop\\012.exe"
int main()
{
BOOL nIsConinue = TRUE;
DEBUG_EVENT debugEvent = {
0 };
//1.创建调试进程
STARTUPINFO startupInfo = {
0 };
PROCESS_INFORMATION pInfo = {
0};
GetStartupInfo(&startupInfo);
BOOL bRet = CreateProcess(dbgProcessName,NULL,NULL,NULL,TRUE,DEBUG_PROCESS||DEBUG_ONLY_THIS_PROCESS,NULL,NULL,&startupInfo,