当前位置: 首页 > news >正文

国家中职示范校建设专题网站兴安盟新百度县seo快速排名

国家中职示范校建设专题网站,兴安盟新百度县seo快速排名,做一整套网站需要什么,太原网站建设优化本章笔者将通过Windows平台下自带的调试API接口实现对特定进程的动态转存功能,首先简单介绍一下关于调试事件的相关信息,调试事件的建立需要依赖于DEBUG_EVENT这个特有的数据结构,该结构用于向调试器报告调试事件。当一个程序发生异常事件或者…

本章笔者将通过Windows平台下自带的调试API接口实现对特定进程的动态转存功能,首先简单介绍一下关于调试事件的相关信息,调试事件的建立需要依赖于DEBUG_EVENT这个特有的数据结构,该结构用于向调试器报告调试事件。当一个程序发生异常事件或者被调试器附加时,就会产生对应的DEBUG_EVENT调试事件,通常DEBUG_EVENT包含了多种调试类型,包括异常事件、进程创建事件、线程创建事件、进程退出事件和线程退出事件等等,我们只需要动态捕捉这些调试事件并作相应的处理即可实现更多有用的功能。

调试事件通常可以分为如下几种类型;

  • 异常事件 (Exception Event) - 发生了异常,例如访问非法的内存、除以零或调用了无效的函数。
  • 进程创建事件 (Process Creation Event) - 当一个新进程被创建时发送此事件。
  • 进程退出事件 (Process Exit Event) - 当一个进程退出时发送此事件。
  • 线程创建事件 (Thread Creation Event) - 当一个新线程被创建时发送此事件。
  • 线程退出事件 (Thread Exit Event) - 当一个线程退出时发送此事件。
  • 调试字符串事件 (Debug String Event) - 当一个进程向其调试器发送字符串消息时发送此事件。
  • 输出字符串事件 (Output String Event) - 当输出调试字符串时发送此事件。
  • 动态链接库加载事件(LOAD_DLL_DEBUG_EVENT) - 当进程装载 DLL 时发送此事件。

当我们需要调试一个程序时有两种方式可以实现,第一种方式是通过CreateProcess()函数创建一个进程,并在调用函数时指定DEBUG_PROCESS || DEBUG_ONLY_THIS_PROCESS则当程序被运行起来后自动进入到调试状态,另一种方式则是通过DebugActiveProcess()函数,该函数接受一个正在运行的进程PID号,可动态附加到一个已运行程序上而对其进行调试。

一旦调试器通过CreateProcess()附加并运行,下一步则是通过WaitForDebugEvent()用于等待一个调试事件,当有调试事件到达后系统会将调试类型存储到debugEvent.dwDebugEventCode这个变量内,此时我们可以通过判断该变量内的参数来对特定的事件做出自定义处理操作,接着会通过ContinueDebugEvent()继续等待下一个调试事件的到来,我们以打开一个进程并创建调试为例,看一下如下代码片段;

#include <iostream>
#include <windows.h>int main(int argc, char* argv[])
{DEBUG_EVENT debugEvent = { 0 };BOOL bRet = TRUE;// 创建调试进程STARTUPINFO startupInfo = { 0 };PROCESS_INFORMATION pInfo = { 0 };GetStartupInfo(&startupInfo);// 创建调试进程并设置 DEBUG_PROCESS || DEBUG_ONLY_THIS_PROCESS 调试事件bRet = CreateProcess("d://lyshark.exe", NULL, NULL, NULL, TRUE, DEBUG_PROCESS || DEBUG_ONLY_THIS_PROCESS, NULL, NULL, &startupInfo, &pInfo);if (!bRet){return 0;}// 附加调试进程// DebugActiveProcess(13940)// 无限循环等待调试事件while (WaitForDebugEvent(&debugEvent, INFINITE)){// 根据调试事件判断switch (debugEvent.dwDebugEventCode){// 异常调试事件case EXCEPTION_DEBUG_EVENT:printf("异常处理事件 \n");break;// 线程创建调试事件case CREATE_THREAD_DEBUG_EVENT:printf("线程创建调试事件 \n");break;// 进程创建调试事件case CREATE_PROCESS_DEBUG_EVENT:printf("进程创建调试事件 \n");break;// 线程退出调试事件case EXIT_THREAD_DEBUG_EVENT:printf("线程退出调试事件 \n");break;// 进程退出调试事件case EXIT_PROCESS_DEBUG_EVENT:printf("进程退出调试事件 \n");break;// 装载DLL调试事件case LOAD_DLL_DEBUG_EVENT:printf("装载DLL调试事件 \n");break;// 卸载DLL调试事件case UNLOAD_DLL_DEBUG_EVENT:printf("卸载DLL调试事件 \n");break;// 输出调试信息事件case OUTPUT_DEBUG_STRING_EVENT:printf("输出调试信息事件 \n");break;}// 使调试器能够继续以前报告调试事件的线程bRet = ContinueDebugEvent(debugEvent.dwProcessId, debugEvent.dwThreadId, DBG_CONTINUE);}system("pause");return 0;
}

当编译并运行上述程序后,读者应该能看到如下图所示的输出效果,其中包括了各类调试事件被触发时的提示信息,由于在调试事件内没有做任何操作,程序在加载后就被自动运行起来了;

本文作者: 王瑞
本文链接: https://www.lyshark.com/post/b8eecce4.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

http://www.yayakq.cn/news/7506/

相关文章:

  • jsp 做网站还是php重庆网站制作系统
  • 临翔网站建设免费编程软件哪个好用
  • 免费下载策划书的网站明星网页设计范例
  • 手机音乐网站源码在线免费建网站
  • 网站漂浮图片代码wordpress恶意 文章
  • 网站对应的ip广州市官网网站建设多少钱
  • 网站维护和建设实报告四合一做网站
  • 关于江西建设监督网网站迁移网上购物网站建设方案
  • 如何利用分类信息网站做推广一个网站可以有几个关键词
  • 正规网站有哪些搜索数据
  • 宝山php网站开发培训大数据培训机构排行榜
  • 做网站所用的技术wordpress前端用户中心投稿
  • 洱源县建设局门户网站六间房直播大厅官网
  • 网站正能量晚上免费软件哪个网站是用php写的
  • 外贸网站建设上海智能设计软件有哪些
  • 灌云网站设计物联网设计大赛官网
  • 沈阳网站维护做跨境电商一年赚多少
  • 海口网站制作公司wordpress安装图片不显示不出来
  • c 网站开发 pdf大数据网站开发工程师
  • 怎么提升搜狗网站排名潍坊网站建设 管雷鸣
  • 南海网站建设价格wordpress怎么和手机连接数据库
  • 医院网站建设情况运营笔记wordpress
  • 网站建设费用包括哪些方面商城网站建设市场分析论文
  • 找人建设网站网络公司怎样推广网站
  • 网站seo 优化竹山县住房和城乡建设局网站
  • flash as3 网站模板建设银行网站可以查保单吗
  • 微网站风格北白象镇做公司网站哪里有
  • 免费建站系统开源怎么做一个网站送给女朋友
  • 网站模板下载之后怎么做平台app如何推广
  • 网站被k 申诉企业查询官方网站