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

整个程序以调试循环为主体,实现了启动调试,继续执行,内存查看,读取寄存器值,显示源代码,断点的设置、查看、删除,三种单步执行: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 的功能,以后有能力可以接入反汇编引擎,实现反汇编,减小对符号文件的依赖。

MyDebugeer 一个简单调试器的实现的更多相关文章

  1. 《python灰帽子》学习笔记:写一个windos 调试器(一)

    一.开发内容介绍 为了对一个进程进行调试,你首先必须用一些方法把调试器和进程连接起来.所以, 我们的调试器要不然就是装载一个可执行程序然后运行它, 要不然就是动态的附加到一个运行的进程.Windows ...

  2. 使用网络TCP搭建一个简单文件下载器

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶服务器Server 三丶测试TCP server服务器 四丶客户端Client 五丶测试客户端向服务器下载 ...

  3. 实现了一个简单的cage变形器

    今天实现了一个简单变形器,可以用一个网格的形状影响另一个网格的形状. 如图,蓝色网格的形状被灰色网格操控. 当前的算法非常简单,就是计算蓝色网格每个点到灰色网格每个点的距离,以距离x次方的倒数作为权重 ...

  4. [转] 与调试器共舞 - LLDB 的华尔兹

    你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? NSNu ...

  5. xcode 调试器 LLDB

    本文完全转载,转载地址:点击这里 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函 ...

  6. 与调试器共舞 - LLDB 的华尔兹

    你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? 1 NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? 1 ...

  7. XCode调试器LLDB

    与调试器共舞 - LLDB 的华尔兹 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一 ...

  8. 织女星开发板调试器升级为Jlink固件

    前言 为了能使用板载的FreeLink调试器来调试RISC-V内核,我们需要把默认的CMSIC-DAP固件,升级为JLink固件,固件升级之后,通过选择使用不同的驱动程序,来支持ARM内核还是RISC ...

  9. 手把手教你制作Jlink-OB调试器(含原理图、PCB、外壳、固件)

    前言 好久没更新博客和公众号了,感谢大家还没取关哈,好吧,我承认是我太懒了,今天分享一个福利! 趁着前段时间嘉立创和捷配打价格战,一天之内,多次降价,看着真是热闹.捷配降到最低3元一款,而嘉立创降到最 ...

随机推荐

  1. 拦截导弹 (NYOJ—79) 最长字串问题 (NYOJ—17)

    这是到动态规划的题目,属于有顺序的0 1 背包问题: 代码: #include<stdio.h> #include<string.h> ][]; //d[i][j] ]; in ...

  2. C++多线程框架

    Thread线程框架 线程定义:线程可以理解为一个特立独行的函数.其存在的意义,就是并行,避免了主线程的阻塞. ----------------------------thread与函数------- ...

  3. OpenStack基础知识-tox的详解介绍

    1.tox简介 tox是通用的虚拟环境管理和测试命令行工具.tox能够让我们在同一个Host上自定义出多套相互独立且隔离的python环境,每套虚拟环境中可能使用了不同的 Python 拦截器/环境变 ...

  4. MATLAB进行无约束优化

    首先先给出三个例子引入fminbnd和fminuc函数求解无约束优化,对这些函数有个初步的了解 求f=2exp(-x)sin(x)在(0,8)上的最大.最小值. 例2 边长3m的正方形铁板,四角减去相 ...

  5. Unity 着色器训练营(2) - MVP转换和法线贴图

    https://mp.weixin.qq.com/s/Qf4qT15s9bWjbVGh7H32lw 我们刚刚公布了Unity 2018.1中,Unity将会内置可视化编程工具Shader Graph, ...

  6. 2017-10-7 清北刷题冲刺班p.m

    测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...

  7. ssh-ssh整合(Struts2+Sprinig+hibernate)

    在之前呢我们已经讲解过ssm以及ssm2的整合开发,今天我们进行ssh的整合,在之前已经有一篇整合ssh的文章,那是基于注解开发的,今天讲解的为基于配置文件注入方式进行开发.思路:spring管理hi ...

  8. docker-compose搭建wordpress[转]

    1.安装docker-compose apt-get install docker-compose 发现下载的是旧版本,不支持2.0的配置文件 还是下载新版本吧,去github查看最新版本https: ...

  9. 我的省选 Day -14

    Day -14 07:43:27 到机房了,不知道早上要做什么题,要不去选一题NOI原题来试试水好了 (因为NOI的原题质量比较有保证吧..) 09:11:22 正在做NOI2016的网格 开始写自己 ...

  10. k8s 更新应用程序

    参考:https://kubernetes.io/docs/tutorials/kubernetes-basics/ 更新应用程序 用户希望应用程序始终可用,开发人员每天需要部署几次新版本的应用程序. ...