windows简单调试器源码2700行左右代码

简单调试器项目中on开头的函数为接收系统的调试事件并做相应的处理,简单调试器实现过程中主要的调试事件为异常事件,相应的处理函数为DispatchException。

在异常事件中访问异常、int3异常、单步异常是跟实现调试器功能密切相关的异常事件,这里用三个函数分别处理三个函数分别为OnExceptionAccess、OnExceptionBreakPoint、OnExceptionSingleStep。

异常处理函数中如果为调试器自己设置的异常程序就会停下来接收用户输入等待下一步处理,相应的用户交互函数为UserInput。

在于用户交互的过程中程序是通过一些列以Cmd开头的命令函数完成相应的功能。

断点相关:

int3断点相关:

int3断点分为临时断点和永久断点,设置断点时如果永久断点与临时断点重复需要把已经存在的临时断点转换为永久断点,其他断点重复的情况不需再次设置断点

临时断点使被调试程序中断以后,需要恢复被调试程序断点为原值,并把该临时断点删除。

永久断点使被调试程序中断以后,需要暂时恢复被调试程序断点为原值,然后配合单步执行过该永久断点,在单步异常中再次设置该永久断点。

删除断点把被调试程序断点恢复为原值,然后删除该断点

内存断点相关:

内存断点分为写入断点和访问断点,通过修改被调试程序内存属性为不可访问,然后在访问异常事件中处理内存断点。

设置内存断点,本程序限制内存断点长度不能超过一个分页,本程序会检测设置的内存断点是否跨内存分页,如果跨内存分页则自动把该断点拆分为两个不跨分页的内存断点。

因为内存访问属性包含内存写入属性,所以在设置内存断点时如果和之前已经存在的内存断点有重叠区域该程序提示用户设置断点失败。

本程序用map记录修改的内存分页起始地址以及对应的内存分页原属性。

设置新内存断点时查找map中该内存分页是否已经存在其他内存断点,如果存在只需添加该内存断点带内存断点表,如果不存在则修改该内存分页属性并存入map,然后添加该内存断点进入内存断点表

被调试程序发生访问异常时首先查询是否命中map中的内存分页,没有命中说明是程序自身的异常不做处理,如果命中map中的内存分页,首先暂时恢复该内存分页为原来的属性,然后继续查找内存断点表看是否命中具体的内存断点,如果命中具体的内存断点表,提示用户,没有命中具体的内存断点,调试程序单步走过该访问异常,然后在单步事件中恢复内存分页属性。

删除内存断点:

首先删除该条内存断点,然后查找内存断点表,查找是否存在与删除内存断点在同一内存分页上的其他内存断点,如果内存断点中不存在与删除内存断点在同一分页的断点,查找map中对应的内存分页,恢复该内存分页属性为原值,删除掉map中该内存分页记录,如果还存与删除内存断点在同一分页的内存断点,则不对map做处理。

硬件断点相关:

设置硬件断点,在单步异常中判断是否为硬件断点异常,如果命中硬件断点提示用户,命中硬件断点的情况下设置单步,在单步异常中恢复硬件断点。

附件中好像没有显示源码源码可以在这里下载:

http://download.csdn.net/detail/qihuanfengyun/8351005

时间: 2025-01-31 01:22:17

windows简单调试器源码2700行左右代码的相关文章

查看和调试Qt源码(动态编译的QT也可进入源码)good

简述 在调试程序的时候,有时需要调试进入 Qt 源码,这不仅有利于我们了解内部实现机制,而且对于解决一些隐蔽性问题很有帮助. 都知道 F11 是“单步进入”,可是在调试的过程中,按下 F11 却无法进入.有人说需要静态编译 Qt 才可以,其实不然,只需要简单的几个配置就可以搞定. 简述 Qt 版本及安装 配置 Qt Creator 源码调试 更多参考 版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820 Qt 版本及安装 Qt 针对 Win

Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用apktool来反编译apk,得到smail源码,然后分析smail代码,采用代码注入技术来跟踪代码,然后找到关键方法进行修改,进而破解,同时还可以使用一些开源的hook框架,比如:Xposed和Cydia Substrate,来进行关键方法的hook.所以这里我们可以看到我们破解的第一步是使用ap

C++、VC++、MFC网页自动注册、登陆、发帖、留言,QQ注册、QQ申请器源码、注册邮箱源码、自动发帖源码

C++.VC++.MFC网页自动注册.登陆.发帖.留言,QQ注册.QQ申请器源码.注册邮箱源码.自动发帖源码 参考资料: 自动登录yahoo邮箱http://blog.csdn.net/suisuibianbian/archive/2005/12/12/550260.aspx VC采集网页所有表单域http://blog.csdn.net/fjssharpsword/archive/2010/12/17/6081689.aspx 说说这类软件最常见的使用方式吧. 也许你经常看到有人发布了以下这类

【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csdn.net/shulianghan VLC 二次开发 视频教程 : http://edu.csdn.net/course/detail/355 博客总结 : -- 本博客目的 : 让 Android 开发者通过看本博客能够掌握独立移植 VLC Media Player 核心框架到自己的 app 中,

使用VS2012调试ReactOS源码

目录 一 下载并安装VS2012 二 下载并安装WDK80 三 下载ReactOS0315源码 四 下载并安装RosBE211 五 用RosBE命令行编译ReactOS源码 六 用VS2012编译ntoskrnl模块 七 制作ReactOS安装盘 八 用VirtualBox安装ReactOS 九 建立调试环境 十 调试ReactOS源码 一. 下载并安装VS2012 我安装的是VS2012_ULT_chs.iso, 网上随便下载 二. 下载并安装WDK8.0 下载地址: http://msdn.

Android逆向之旅---动态方式破解apk前奏篇(Eclipse动态调试smail源码)

一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用apktool来反编译apk,得到smail源码,然后分析smail代码,采用代码注入技术来跟踪代码,然后找到关键方法进行修改,进而破解,同时还可以使用一些开源的hook框架,比如:Xposed和Cydia Substrate,来进行关键方法的hook.所以这里我们可以看到我们破解的第一步是使用ap

设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的1

最近突然萌发了研究JDK源码的想法,所以就想到了在自己常用的Eclipse上可以调试JDK源码. 整个设置过程也很简单: 首先你要安装好JDK(我的JDK安装路径根目录是D:\Java\jdk-8u92-windows-x64),JDK安装路径里有个"src.zip"就是JDK的源码文件压缩包: 设置好环境变量的JAVA_HOME变量和PATH变量(JAVA_HOME变量值也是D:\Java\jdk-8u92-windows-x64). 然后打开Eclipse设置可以Debug模式调试

js调试系列: 源码定位与调试[基础篇]

js调试系列目录: - 如果看了1, 2两篇,你对控制台应该有一个初步了解了,今天我们来个简单的调试.昨天留的三个课后练习,差不多就是今天要讲的内容.我们先来处理第一个问题:1. 查看文章下方 推荐 这个功能所调用的函数源码其实非常简单,点放大镜选中那个推荐即可.这个  votePost(cb_entryId,'Digg')  就是推荐按钮所调用的函数了,是不是非常简单. 第二个问题,定位到函数所在文件位置.其实也是非常简单的,当然,不熟悉控制台的朋友也许不知道怎么看.我在控制台输入 voteP

Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为了安全或者效率问题,会把一些重要的功能放到native层,那么这样一来,我们前篇说到的Eclipse调试smali源码就显得很无力了,因为核心的都在native层,Android中一般native层使用的是so库文件,所以我们这篇就来介绍如何调试so文件的内容,从而让我们破解成功率达到更高的一层.