基本的调试器框架
来源:互联网 发布:java soap xml 编辑:程序博客网 时间:2024/05/19 04:51
逻辑
关键的API、数据结构
//调试事件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;
CreateProcess
WaitForDebugEvent
ContinueDebugEvent
效果
代码
#include "stdafx.h"#include <iostream>#include <Windows.h>using namespace std;void main(){ PROCESS_INFORMATION process_info; STARTUPINFO startup_info; memset(&process_info, 0, sizeof(process_info)); memset(&startup_info, 0, sizeof(startup_info)); startup_info.cb = sizeof(STARTUPINFO); if(CreateProcess(TEXT("E:\\myCode\\helloworld\\Debug\\helloworld.exe"),NULL, NULL, NULL, FALSE, DEBUG_ONLY_THIS_PROCESS | CREATE_NEW_CONSOLE,NULL, NULL, &startup_info, &process_info)){ //ResumeThread(process_info.hThread); while(true){ DEBUG_EVENT debug_info; if(!WaitForDebugEvent(&debug_info, INFINITE)) break; switch (debug_info.dwDebugEventCode) { case CREATE_PROCESS_DEBUG_EVENT://创建进程 cout<<"CREATE_PROCESS_DEBUG_EVENT"<<endl; break; case CREATE_THREAD_DEBUG_EVENT://创建线程 cout<<"CREATE_THREAD_DEBUG_EVENT"<<endl; break; case EXIT_THREAD_DEBUG_EVENT://退出线程 cout<<"EXIT_THREAD_DEBUG_EVENT"<<endl; break; case EXIT_PROCESS_DEBUG_EVENT://退出进程 cout<<"EXIT_PROCESS_DEBUG_EVENT"<<endl; break; case EXCEPTION_DEBUG_EVENT://发生异常 cout<<"EXCEPTION_DEBUG_EVENT"<<endl; break; case OUTPUT_DEBUG_STRING_EVENT://调用OutputDebugString函数 cout<<"OUTPUT_DEBUG_STRING_EVENT"<<endl; break; case RIP_EVENT://发生系统调试错误 cout<<"RIP_EVENT"<<endl; break; case LOAD_DLL_DEBUG_EVENT://加载dll cout<<"LOAD_DLL_DEBUG_EVENT"<<endl; break; case UNLOAD_DLL_DEBUG_EVENT://卸载dll cout<<"UNLOAD_DLL_DEBUG_EVENT"<<endl; break; } if(debug_info.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) break; ContinueDebugEvent(debug_info.dwProcessId, debug_info.dwThreadId, DBG_CONTINUE); } CloseHandle(process_info.hThread); CloseHandle(process_info.hProcess); }else{ cout<<"Can't create process."<<endl; }}
0 0
- 基本的调试器框架
- 3.基于IntelVt技术的Linux内核调试器- 调试器设计与实现(1):基本框架
- GDB调试器的基本用法
- Python的调试框架bdb及调试器Pdb
- linux调试器的实现---主要框架
- 游戏的基本框架
- Android的基本框架
- stl基本的框架
- AJAX 的基本框架
- Spring的基本框架
- HTML的基本框架
- OpenGL的基本框架
- c++的基本框架
- 爬虫的基本框架
- 简单调试器框架
- 软件调试的基本技巧
- 图像调试界面的框架
- 调试器(GDB)的基本使用方法(之一)
- 1044: 谁家孩子跑最慢*
- JavaScript语言基础---(九)Array
- SQL Server不允许保存更改数据表解决方法
- 在linux中添加字体
- R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD系列深度学习检测方法梳理
- 基本的调试器框架
- Java事务处理全解析(五)—— Template模式
- linux下crontab的php脚本使用方法
- TCP 和 UDP 在socket编程中的区别
- Android support.v7库中的几种控件,布局控件
- DOOM4图形研究
- 模拟登陆学校教务处网站,并保存到成绩为excel格式
- Sublime Text 3 Ubuntu x64 运行心得
- 梯度下降法(SGD+BGD+MBGD)