如何配置WinDbg和VMware实现内核的调试

设置 VMware 的虚拟串口

运行 VMware,首先将 Guest OS 系统电源关闭,这样才能修改该系统的虚拟机设置。
在这里插入图片描述
单击界面上的“编辑虚拟机设置”选项对虚拟机的属性进行设置。
单击“添加”按钮,打开 VMware 的 添加硬件向导 对话框
选择“串行端口”,并单击“ Next >”按钮
在这里插入图片描述
选择“ 使用命名的管道 ”,并单击“ Next >”按钮
第一个输入框中输入“ \\.\pipe\com_1”,表示该虚拟串口将要映射到 Host OS 的管道名称。
第二个框中选择“该端是服务器”,表示 Guest OS 是被调试的系统
第三个框中选择“另一端是应用程序”,表示 Host OS 将使用一个调试软件来作为管道的另一端。
设备状态,勾选“启动时连接”,表示在开启虚拟机操作系统时,与这个虚拟设备(串口),建立连接。单击“ 完成”,按钮
在这里插入图片描述
此时,可以看到 Hardware 列表中已经有了一个新的设备, 串行端口(使用管道名:
\\.\pipe\com_1)。这里还要勾选右侧“I/O 模式”中的“ 轮询时主动放弃CPU ”选项
至此就完成了对 VMware 串口的设置。
在这里插入图片描述

修改 Guest OS 的启动配置文件

在刚才设置完虚拟串口后,这里需要重启虚拟机中的 Guest OS。进入系统后,我们要对系统的启动配置文件作一些修改,才能使 Host OS 中的 WinDbg 调试该系统。
Windows 20 00、 Windows XP 、 Windows 200 3 系统的启动配置文件位于系统盘根目录下的 boot.ini,该文件默认是有保护属性的。
执行 attrib -s -h -r c:\boot.ini 去除保护属性,然后开始编辑该文件,一个默认的 boot.ini 文件
在这里插入图片描述
将其修改为
在这里插入图片描述
最后,修改完 boot.ini 文件后,执行 attrib +s +h +r c:\boot.ini 恢复该文件的保护属性。

Windows Vista以后win7等操作

从 Windows V ista 开始,考虑到 boot.ini 文件很容易被恶意软件所修改,因此不再使用 boot.ini 文件,而是使用 Boot Configuration Data(BCD)。修改 BCD,需要启动一个管理员权限的命令行窗口。然后使用 bcdedit 命令来编辑 BCD。首先将当前启动入口复制一份,

bcdedit /copy {current} /d "Win7 Debug"

在这里插入图片描述
其中双引号中的字符串(“Win7 Debug” )为新启动入口的名称。如果执 行 成 功 , 会 得 到 新 启 动 入 口 的 GUID , 即 图中 的 “ {ad2983ae-3010-11ee-b297-b234ec8321b1}”,用来唯一标识这个启动入口。

接着,我们需要对这个启动入口,启用内核调试

bcdedit /debug {ad2983ae-3010-11ee-b297-b234ec8321b1} on

在这里插入图片描述
BCD 中有一套全局的调试设置,使用 bcdedit /dbgsettings 可以观察和修改这套全局设置。
在这里插入图片描述
默认的全局调试设置中,调试类型为 Serial,调试端口为 1,波特率为 115200,这已经是我们需要的设置了。

当然也可以通过如下命令再次设置为串口调试

bcdedit /dbgsettings serial DEBUGPORT:1 BAUDRATE:115200

如果希望为某个自启动项设置单独的调试选项,那么可以使用 bcdedit /set 命令, 例如:

bcdedit /set {ad2983ae-3010-11ee-b297-b234ec8321b1} debugtype serial
bcdedit /set {ad2983ae-3010-11ee-b297-b234ec8321b1} debugport 1
bcdedit /set {ad2983ae-3010-11ee-b297-b234ec8321b1} baudrate 115200

至此虚拟机中的 Guest OS 就设置好了,先不要重启,当下一步设置好 WinDbg 后,再重新启动。

设置 WinDbg 参数

首先在桌面或快速启动栏中创建一个 WinDbg 的快捷方式,然后修改这个快捷方式属性中
的“快捷方式”。

将“快捷方式”页中的“目标(T)”框中加上以下参数:

-b -k com:port=\\.\pipe\com_1,baud=115200,pipe

在这里插入图片描述

重启虚拟机中的 Guest OS

重启虚拟机,将会看到如图所示两个系统入口,选择“ Microsoft W indows XP Professional – debug”,然后安下回车键。
在这里插入图片描述
回车后,会发现系统貌似卡住一样,这其实是系统在等待串口另一端的调试程序与其建立连接。

启动 WinDbg

这时启动刚才设置好的 WinDbg 快捷方式,发现很快 WinDbg 就连上虚拟机中的 Guest OS了,如果很长时间没有连接上的话, 可以单击 WinDbg 菜单中的"Debug"->“Kernel Connection”->“Resynchronize”。连接后的效果
在这里插入图片描述
接下来就可以通过 WinDbg 来调试虚拟机中的 Guest OS 了

输入命令g即可开启windows
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/223915.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

构建第一个事件驱动型 Serverless 应用

我相信,我们从不缺精彩的应用创意,我们缺少的把这些想法变成现实的时间和付出。 我认为,无服务器技术真的有助于最大限度节省应用开发和部署的时间,并且无服务器技术用可控的成本,实现了我的那些有趣的想法。 在我 2…

c语言笔记之文件操作

16 文件操作 嵌入式开发中基本用不上,这章不重要 a 字符集:泛泛意义上的文本文件中的数据与磁盘中保存的二进制之间的映射关系。 常见的字符集:ASCLL,Latin,GB2312,GBK,UTF-8 解码过程:从看不懂到看得懂的过程。 ​ 如果操作时…

02Docker容器卷

Docker容器卷 1.数据卷是什么 简而言之: 就是Docker用来存储数据的,在镜像被删除的时候,卷中数据不会被删除,就是相当于一个数据库备份数据,相当于Windows中的目录或文件 2.目的 解决数据持久化 独立容器的生存周期,帮助容器间继承和共享数据 3.数据卷的使用 1.直接添加 doc…

Linux 多线程(C语言) 备查

基础 1)线程在运行态和就绪态不停的切换。 2)每个线程都有自己的栈区和寄存器 1)进程是资源分配的最小单位,线程是操作系统调度执行的最小单位 2)线程的上下文切换的速度比进程快得多 3)从应用程序A中启用应…

【UE】制作地月全息投影

效果 步骤 1. 在必应国际版上搜索“purlin noise”,下载如下所示图片 再搜索“Earth Map”,下载如下所示图片 再搜索“Moon 360”,下载如下所示图片 这三张图片的资源链接如下: 链接:https://pan.baidu.com/s/1b_50q…

Leetcode每日一题学习训练——Python3版(最小化旅行的价格总和)

版本说明 当前版本号[20231206]。 版本修改说明20231206初版 目录 文章目录 版本说明目录最小化旅行的价格总和理解题目代码思路参考代码 原题可以点击此 2646. 最小化旅行的价格总和 前去练习。 最小化旅行的价格总和 现有一棵无向、无根的树,树中有 n 个节点…

【Spark学习笔记】- 5.1 IO基本实现原理

IO基本实现原理 Input& Output 字节流 InputStream in new FileInputStream("path") int i -1while ( (i in.read()) ! -1 ) {println(i); }上述为字节流 需要一个字节一个字节读取数据,读一个打印一个。功能可以实现,效率不高。 缓…

9_企业架构队列缓存中间件分布式Redis

企业架构队列缓存中间件分布式Redis 学习目标和内容 1、能够描述Redis作用及其业务适用场景 2、能够安装配置启动Redis 3、能够使用命令行客户端简单操作Redis 4、能够实现操作基本数据类型 5、能够理解描述Redis数据持久化机制 6、能够操作安装php的Redis扩展 7、能够操作实现…

AI跨界学习,不再是梦!

大家好!今天给大家推荐的 GPTs 是【行业知识脉络】,帮助大家快速了解某个领域的脉络,并提供足够的学习资料和建议。 在AI时代,从小白到专家的1万小时定律即将失效,用少于1千小时掌握行业知识树和其核心概念是如何学习的…

内核无锁队列kfifo

文章目录 1、抛砖引玉2、内核无锁队列kfifo2.1 kfifo结构2.2 kfifo分配内存2.3 kfifo初始化2.4 kfifo释放2.5 kfifo入队列2.6 kfifo出队列2.7 kfifo的判空和判满2.8 关于内存屏障 1、抛砖引玉 昨天遇到这样一个问题,有多个生产者,多个消费者&#xff0c…

使用Java网络编程,窗口,线程,IO,内部类等实现多人在线聊天1.0

1.整体思路 思路图 整体思路如上: 涉及知识点:线程网络编程集合IO等 TCP 协议 2.代码实现过程 服务端 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import jav…

SQL手工注入漏洞测试(Sql Server数据库)-墨者

———靶场专栏——— 声明:文章由作者weoptions学习或练习过程中的步骤及思路,非正式答案,仅供学习和参考。 靶场背景: 来源: 墨者学院 简介: 安全工程师"墨者"最近在练习SQL手工注入漏洞&#…

大模型应用设计的10个思考

技术不是万能的,但没有技术却可能是万万不能的,对于大模型可能也是如此。基于大模型的应用设计需要聚焦于所解决的问题,在自然语言处理领域,大模型本身在一定程度上只是将各种NLP任务统一成了sequence 到 sequence 的模型。利用大…

使用 Webshell 访问 SQL Server 主机并利用 SSRS

本文将指导您使用RDS SQL Server实例的主机账号登录和管理SQL Server Reporting Services(SSRS)数据库。 背景信息 RDS SQL Server提供Webshell功能,用户可以通过Web界面登录RDS SQL Server实例的操作系统。通过Webshell,用户可…

一次重新加载所有 maven 项目产生的 OOM

1、解决什么问题? 忘了截图了,用文字描述就是由于Reload All Maven Projects导致的 OOM 异常。 2、尝试与解决 2.1、尝试 2.1.1、尝试清理idea缓存(无效) 2.1.2、重启idea(无效) 2.1.3、重启电脑&am…

硬件连通性测试对象与实施过程

硬件连通性测试是一种系统性的测试方法,用于验证硬件设备之间的连接、通信和协作是否正常。这包括各种硬件组件,如计算机、网络设备、传感器、打印机等。测试的目的是确保硬件设备在其设计和运行环境中能够正确地交互和通信。 一、硬件连通性测试对象 网…

Slurm集群管理系统

Slurm集群管理系统 Slurm(Simple Linux Utility for Resource Management,https://slurm.schedmd.com/)是一个开源的、容错的、高度可扩展的集群管理和作业调度系统,适用于大型和小型高性能计算(HPC)集群。…

憋了个大招_群发版

大家好,我是良许。 憋了个大招,兄弟们!我花了两个月的时间,搭建了一个自己的网站啦~ 不卖关子,网站链接为: www.lxlinux.net/e/ 网站首页截图如下: 这个网站全部都是关于嵌入式及…

【JavaWeb学习笔记】6 - Tomcat

项目代码 零、在线文档 Apache Tomcat 8 (8.0.53) - Documentation Index WEB开发 1. WEB,在英语中web表示网/网络资源(页面,图片,css,js)意思,它用于表示WEB服务器(主机)供浏览器访问的资源 2. WEB服务器(主机)上供外界访问的Web资源分为: 静态web…

动手学习深度学习-跟李沐学AI-自学笔记(3)

一、深度学习硬件-CPU和GPU 芯片:Intel or AMD 内存:DDR4 显卡:nVidia 芯片可以和GPU与内存通信 GPU不能和内存通信 1. CPU 能算出每一秒能运算的浮点运算数(大概0.15左右) 1.1 提升CPU利用率 1.1.1 提升缓存…