博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyDebugeer 一个简单调试器的实现
阅读量:5007 次
发布时间:2019-06-12

本文共 1103 字,大约阅读时间需要 3 分钟。

学习的是网上的帖子,所以就不贴源码了。

整个程序以调试循环为主体,实现了启动调试,继续执行,内存查看,读取寄存器值,显示源代码,断点的设置、查看、删除,三种单步执行:StepIn、StepOver、StepOut,显示变量列表、显示指定类型内存内容,显示函数调用栈等功能。

原贴写的很好,从中学到了很多,特别是对<DbgHelp.h>有了接触和了解,学习了Windows提供给用户调试的API,当然这可能是这个程序的不足,因为基本上所有的功能都是利用API实现的,没有提及一些特别的知识和方法。不过对于我这样的小白来说还是收益匪浅。

令我最难受的地方是,在循环结构中我遇到了问题:

while (WaitForDebugEvent(&debugEvent, INFINITE) == TRUE)     {        if (DispatchDebugEvent(&debugEvent) == TRUE)        {            ContinueDebugEvent(g_processID, g_threadID, g_continueStatus);        }        else         {            break;        }    }

这个循环没有问题,可以等到OpenPrcess,loadDll等 Debug事件,但是当等到第一个CreateThread事件时,整个程序就陷入了无限等待,卡住了,不能继续循坏。调试了好久,也不知问题在哪里,后来放到Win7虚拟机下就完美运行了(本机我Win10)。

后来我就继续完善代码,然后去虚拟机里跑。等有空了,把这个while循环单独test一下,看看到底有什么问题。

 

学习完原贴和源程序, 我对符号文件、调试符号、以及相关的操作有了很多的认识和了解,可惜需要符号文件的支持,不然可以实现很多操作远程进程的动作。

 

另外,幸好对汇编,栈帧有一定的认识,学习起来不是很困难,对32位函数调用过程也有了很深的认识。

 

还有很重要的一部分知识就是Windows对异常的处理分发机制,这方面以前做过了解,但是都是文字方面的,这次有了实际体验。

 

我觉得这份代码的封装性和结构还是很不错的,至少我没有这样的能力,需要多多提高。

 

希望以后有机会,能继续完善这个项目,提供64位的功能,加入类似于windbg那种!peb 就能查看peb 的功能,以后有能力可以接入反汇编引擎,实现反汇编,减小对符号文件的依赖。

 

转载于:https://www.cnblogs.com/HsinTsao/p/6533160.html

你可能感兴趣的文章
Equation漏洞混淆利用分析总结(上)
查看>>
js-倒计时自动隐藏
查看>>
shell学习1shell简介
查看>>
VM虚拟机下安装Centos7.0图文教程
查看>>
Javascript 汉字转拼音
查看>>
简单工厂模式
查看>>
Android(java)学习笔记205:JNI之编写jni程序适配所有处理器型号
查看>>
11.3 字典复习
查看>>
实用SQL
查看>>
走在Android开发的路上(二):Android快速入门
查看>>
Hbase取数据问题Bug
查看>>
《你的灯还亮着吗》阅读笔记三
查看>>
POJ2533 Longest ordered subsequence
查看>>
大话设计模式之简单工厂模式
查看>>
如何创建ASM磁盘?
查看>>
利用U盘安装Cent OS 7操作系统
查看>>
贝塞尔曲线值
查看>>
通用链表实现(参考Linux List)
查看>>
Cider扩展架构:AttributeTable和AttributeTableBuilder
查看>>
phpMyAdmin项目已迁移至GitHub
查看>>