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

2023-05-16

简单调试器项目中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


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 自动驾驶仿真系统登Nature子刊,准确建模事故率事故类型,全华人团队打造

    严鑫涛 投稿自 凹非寺 量子位 公众号 QbitAI 自动驾驶测试离不开仿真系统 这种高效低成本的方法 xff0c 可以模拟车辆在真实环境下遇到的各种情况 xff0c 以提高车辆真正上路后的安全性 因此 xff0c 模型的准确性成为了仿真系
  • windows10快捷键(windows10常用快捷键大全)

    时间就是金钱 xff0c 那么我们该如何提升办公效率已经变得非常的必须 xff0c 能用键盘操作的东西 xff0c 几乎不用鼠标去点击 xff0c 所以快捷键就变得非常的重要 那么今天就和大家一起来分享Windows 10的各种快捷键 Wi
  • 影响SQL Server数据库应用性能的几个常见因素 (2012/1/18)

    转自 xff1a http blogs msdn com b apgcdsd archive 2012 01 18 sql server 2012 1 18 aspx 影响SQL Server数据库应用性能的几个常见因素 性能问题是困扰数据
  • 字符移位(腾讯2017实习生)

    字符移位 1 题目 xff1a 小Q最近遇到了一个难题 xff1a 把一个字符串的大写字母放到字符串的后面 xff0c 各个字符的相对位置不变 xff0c 且不能申请额外的空间 你能帮帮小Q吗 xff1f 输入描述 输入数据有多组 xff0
  • 【群晖Nas开启WebDAV服务,路由器映射端口,实现Win10远程映射网路驱动器】

    群晖Nas开启WebDAV服务 xff0c 路由器映射端口 xff0c 实现Win10远程映射网路驱动器 群晖Nas开启WebDAV服务路由器映射端口实现Win10远程映射网路驱动器 群晖Nas开启WebDAV服务 登录群晖 xff0c 在
  • 租用游艇问题 石子合并问题 动态规划实验

    实验名称 xff1a 动态规划 一 实验预习 1 实验目的 1 理解并掌握动态规划方法的设计思想 xff1b 2 提高应用动态规划方法解决问题和设计算法的能力 xff1b 3 通过编程实现租用游艇问题和石子合并问题 xff0c 进一步理解动
  • django项目初始化

    django项目初始化 1 为了方便管理app xff0c 我们添加专门的apps文件夹来存放所有的app 结构如下 1 1设置完apps文件夹以后我们需要对配置文件做相应的更改 1 1 1 在seetings py里添加django文件的
  • 关于 Linux 输入正确账号密码显示 Sorry,that did not work的问题

    解决办法 xff1a 1 设置用户名时不要以数字开头 xff0c 字母和下划线都是可以的 xff0c 2 字母设置时记得开没开大小写 xff0c 在输入账号密码时大写Capslock是没用的 xff0c 要 shift 43 字母 xff0
  • 最小二乘与最大似然估计之间的关系

    在测量误差服从高斯分布的情况下 xff0c 最小二乘法等价于极大似然估计 Ref xff1a 最小二乘法与极大似然估计的区别与联系 最小二乘与最大似然估计之间的关系
  • Python使用pydub库对mp3与wav格式进行互转的方法

    我们需要用到一个叫pydub的类库 xff0c pydub是python的高级一个音频处理库 xff0c 可以让你以一种不那么蠢的方法处理音频 开发者原话 1 https github com jiaaro pydub 附上开发者的gith
  • 安装docker,vulhub

    1 sudo apt install apt transport https ca certificates curl gnupg agent software properties common 2 curl fsSL https dow
  • 5GC移动性管理(5GS mobility management ,5GMM)

    主要内容 介绍5GC中移动性管理功能的实现 注册管理状态模型连接管理状态模型UE Context的构成用户标识符 xff08 SUPI SUCI PEI等 xff09 移动性管理限制及术语 xff08 注册区 禁止区域 服务受限区域 xff
  • 云计算实战系列三(Linux文件管理)

    文件管理 1 Linux目录结构 1 1 WINDOWS LINUX 对比 Windows 以多根的方式组织文件 C D E Linux 以单根的方式组织文件 1 2 简介 目录结构 xff1a FSH Filesystem Hierarc
  • hashCode()和equals()的区别

    一 hashCode 和equals 是什么 xff1f hashCode 方法和equals 方法的作用其实一样 xff0c 在Java里都是用来对比两个对象是否相等一致 二 hashCode 和equals 的区别 下边从两个角度介绍了
  • debian下smplayer播放视频无声音的问题

    请先安装解码器和smplayer 解码器essential 20071007 tar bz2一般都是手动安装 xff0c smplayer使用apt get install即可 安装过程 xff0c 参考mplayer官网步骤 xff1a
  • iOS可视化界面编程XIB简单使用

    iOS的UI界面的编写现在基本分为三个流派 手写代码XIBStoryBoard 三者区别 本文主要介绍XIB的简单使用 xff0c 基于XIB在界面上放几个按钮并生成点击事件代码 以下代码及截图基于XCode12 快速创建 1 创建文本对象
  • 方面情感分析的四个情感元素介绍

    方面情感分析介绍 一般情感分析的问题由两个部分组成 xff1a 目标和情绪 目标可以是实体也可以是实体的某一个属性 xff0c 方面 xff0c 特点等等 xff0c 情绪是表达对目标的感情 xff0c 这里一般是积极 xff0c 消极 x
  • go中使用sqlite

    1 安装mingw64 1 1 下载mingw sqlite作为一个快速开发的数据库 xff0c 理应被go支持 xff0c 但是要在go里面使用sqlite xff0c 实际上是要下载sqlite的源代码编译的 xff0c 当然 xff0
  • map 详解(C++)

    现实中的数据很多是关联的 xff0c 例如书本名称和价格 xff0c 每条数据都含有两部分 xff1a 信息学竞赛一本通 xff1a 80 高等数学 xff1a 27 5 生物信息分析 xff1a 35 5 我们可以使用map存储这类一对一
  • 详解Ubuntu文件的结构

    首先我们知道 xff0c linux系统文件结构和windows系统文件结构不同之处在于 xff0c linux系统文件统一挂载在根目录下的 xff0c 而windows系统的文件是分磁盘挂载的 windows下通常分C盘D盘E盘等 xff

随机推荐

  • Go 语言 exec 实时获取外部命令的执行输出

    Go 语言 exec 实时获取外部命令的执行输出 在 Go 语言中调用外部 Linux 命令可以通过标准的 os exec 包实现 xff0c 我们一般的使用方式如下 xff1a span class token keyword packa
  • ubuntu 18.04 arm64版 安装docker 踩坑

    一 安装ubuntu 18 04系统 可以参考该系列其他文章 二 安装docker 1 先卸载可能存在的旧版本 apt remove docker docker span class token operator span engine d
  • Linux网络中的桥 (Bridge)

    桥简介 桥 xff0c 从字面来讲就是在一条河流上面建造一条路 xff0c 对 xff0c 就是这样 xff0c 甭管是多大多长跨江还是跨海 xff0c 它都是起到连接两岸的作用 在计算机的网络世界中也存在这种连接的两个网络的设备 xff0
  • MySQL8.0 开启远程连接

    一 MySQL 开启远程连接需要先在服务器上登录到 MySQL mysql u root p 1 然后 Enter password 二 修改 root 账户的 Host 1 打开 mysql 数据库 use mysql 1 2 查看 us
  • 实时天气API

    restful接口查询天气 实时天气 API 和风天气开发平台 实时天气 全国4000 个市县区和海外15万个城市实时天气数据 包括实时温度 体感温度 风力风向 相对湿度 大气压强 降水量 能见度 露点温度 云量等数据 请求URL nbsp
  • C程序的内存结构

    以类Unix环境下的程序运行为例 xff0c 说明C程序的运行过程和内存分配 xff0c windows环境下原理一致 xff0c 但实现细节会有区别 xff0c 所以首先我们要明白 xff1a 程序的内存布局 Program Memory
  • AD采用多层原理图和ROOM方式高效率绘制重复性功能电路板图

    我们在使用altium designer绘制原理图和PCB时 xff0c 往往会遇到多路重复性的电路 xff0c 其功能和走线完全一致 xff0c 在条件允许的情况下我们可以采用多层原理图和ROOM方法避免重复性劳动 本文以两路RS485电
  • Ubuntu网络频繁掉线解决方案

    转自 xff1a http www cnblogs com ljxxz p 5089863 html 年底了 xff0c 实验室终于给配了个电脑 xff08 Ubuntu系统 xff09 xff0c 博主欣喜若狂啊 xff0c 然而装好后发
  • 部分Windows 10企业版用户无法使用微软Edge浏览器

    图片来自 xff1a neowin 很多关于Windows 10的问题悬而未决 xff0c 在微软正式推出Windows 10之前还有一个多月的时间 xff0c 很多事情都会发生改变 就在本周 xff0c 来自Gartner Inc的分析师
  • 无法远程连接如何排错

    无法远程连接如何排错 去北京天安门广场 连接服务器 服务器位置 10 0 0 200 1 连接不上服务器 测试我和天安门广场之间的道路是否通畅 百度地图 连接不上10 0 0 200 测试和200通信是否正常 ping 10 0 0 200
  • 51单片机实时时钟显示

    51单片机 43 DS1302 43 DS18B20 43 LCD12864 用的IIC通信 xff0c 写的一个ds3231时钟模块的程序 xff0c 可更改时间 xff0c 下面是 h文件里面的部分代码 ifndef ds3231 h
  • RouterOS(ROS)软路由阿里云动态域名解析Aliyun DDNS

    本文讲解ROS借助阿里云的 DNS API 来实现域名与动态 IP 的绑定 xff0c 用来达到外网访问内网设备的需求 一 给域名添加A记录解析 1 点击登录阿里云域名控制台 2 给域名添加一个A记录解析 xff0c 记录值可以随意填写 x
  • <X>远程登录服务

    文章目录 一 ssh1 ssh服务的用途2 基本用法3 ssh 服务的 key 认证 二 文件传输1 实验环境2 scp 命令3 rsync命令 三 文件的归档与压缩1 文件归档2 文件的压缩3 tar 43 压缩 四 日志1 journa
  • springboot项目正常启动后却无法访问

    报错内容 xff1a Resolved org springframework http converter HttpMessageNotReadableException Required request body is missing
  • 如何解决远程桌面登录后闪退

    在cmd中输入这个命令 xff0c 可以防止登录远程桌面后闪退 mstsc admin
  • ubuntu22.0.4 kolla多节点搭建openstack ,skyline

    kolla部署openstack 基础 更新软件包索引 span class token function sudo span span class token function apt span update 2 安装 Python 构建
  • 论文阅读 | Video Super-Resolution Transformer

    引言 xff1a 2021年用Transformer实现视频超分VSR的文章 xff0c 改进了SA并在FFN中加入了光流引导 论文 xff1a here 代码 xff1a here Video Super Resolution Trans
  • PostgreSQL12 windows zhparser插件安装

    zhparser https github com amutu zhparser 1 scws编译 因为zhparser需要使用scws进行中文分词先编译scws xff0c zhparser的README有scws源码的下载地址 http
  • WM_COMMAND消息

    当用户点击菜单 按钮 下拉列表框等控件时候 xff0c 会触发WM COMMAND LOWORD wParam 是控件或菜单或加速键的ID xff0c 菜单的sparator的ID为0 如果LOWORD wParam 是控件ID xff0c
  • windows简单调试器源码2700行左右代码

    简单调试器项目中on开头的函数为接收系统的调试事件并做相应的处理 xff0c 简单调试器实现过程中主要的调试事件为异常事件 xff0c 相应的处理函数为DispatchException 在异常事件中访问异常 int3异常 单步异常是跟实现