通过vmware虚拟机安装和调试编译好的 ReactOS

news2024/11/13 14:24:39

1. 首先创建 VMware 虚拟机配置脚本 `setup_vmware.bat`:

```batch
@echo off
:: setup_vmware.bat

:: 设置路径
set "REACTOS_BUILD=E:\Reactos_WinDriver\reactos-master\build"
set "VM_PATH=E:\VMs\ReactOS_Debug"
set "VMWARE_PATH=C:\Program Files (x86)\VMware\VMware Workstation"

:: 创建虚拟机目录
if not exist "%VM_PATH%" mkdir "%VM_PATH%"

:: 创建 VMware 虚拟机配置文件
echo Creating VMware configuration file...
(
echo .encoding = "windows-1252"
echo config.version = "8"
echo virtualHW.version = "16"
echo memsize = "2048"
echo numvcpus = "2"
echo displayName = "ReactOS_Debug"
echo guestOS = "other"
echo serial0.present = "TRUE"
echo serial0.fileType = "pipe"
echo serial0.fileName = "\\.\pipe\ReactOS_Debug"
echo serial0.pipe.endPoint = "server"
echo serial0.tryNoRxLoss = "FALSE"
echo debugStub.listen.guest32 = "TRUE"
echo debugStub.hideBreakpoints = "TRUE"
echo isolation.tools.hgfs.disable = "TRUE"
echo isolation.tools.dnd.disable = "TRUE"
echo isolation.tools.copy.enable = "TRUE"
echo isolation.tools.paste.enable = "TRUE"
echo scsi0.present = "TRUE"
echo scsi0.virtualDev = "lsilogic"
echo scsi0:0.present = "TRUE"
echo scsi0:0.fileName = "ReactOS.vmdk"
echo scsi0:0.deviceType = "scsi-hardDisk"
echo ide1:0.present = "TRUE"
echo ide1:0.fileName = "auto detect"
echo ide1:0.deviceType = "cdrom-raw"
echo ethernet0.present = "TRUE"
echo ethernet0.connectionType = "nat"
echo ethernet0.virtualDev = "e1000"
echo ethernet0.wakeOnPcktRcv = "FALSE"
echo ethernet0.addressType = "generated"
echo sound.present = "TRUE"
echo sound.virtualDev = "hdaudio"
echo pciBridge0.present = "TRUE"
echo pciBridge4.present = "TRUE"
echo pciBridge4.virtualDev = "pcieRootPort"
echo pciBridge4.functions = "8"
echo pciBridge5.present = "TRUE"
echo pciBridge5.virtualDev = "pcieRootPort"
echo pciBridge5.functions = "8"
echo pciBridge6.present = "TRUE"
echo pciBridge6.virtualDev = "pcieRootPort"
echo pciBridge6.functions = "8"
echo pciBridge7.present = "TRUE"
echo pciBridge7.virtualDev = "pcieRootPort"
echo pciBridge7.functions = "8"
) > "%VM_PATH%\ReactOS_Debug.vmx"

:: 创建虚拟硬盘
"%VMWARE_PATH%\vmware-vdiskmanager.exe" -c -s 20GB -t 0 -a lsilogic "%VM_PATH%\ReactOS.vmdk"

echo VMware virtual machine setup completed!
```

2. 创建启动调试脚本 `start_vmware_debug.bat`:

```batch
@echo off
:: start_vmware_debug.bat

:: 设置路径
set "REACTOS_BUILD=E:\Reactos_WinDriver\reactos-master\build"
set "VM_PATH=E:\VMs\ReactOS_Debug"
set "VMWARE_PATH=C:\Program Files (x86)\VMware\VMware Workstation"

:: 确保调试管道不存在
if exist \\.\pipe\ReactOS_Debug (
    echo Cleaning up existing debug pipe...
    timeout /t 2 /nobreak > nul
)

:: 启动虚拟机
start "ReactOS VM" "%VMWARE_PATH%\vmware.exe" -x "%VM_PATH%\ReactOS_Debug.vmx"

:: 等待虚拟机启动
timeout /t 5 /nobreak

:: 启动调试器
start "WinDbg" "C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\windbg.exe" -k com:pipe,port=\\.\pipe\ReactOS_Debug,resets=0,reconnect

echo Debug environment started!
```

3. 创建 VMware 工具检查脚本 `check_vmware_tools.bat`:

```batch
@echo off
:: check_vmware_tools.bat

:: 检查 VMware 安装
if not exist "C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe" (
    echo VMware Workstation not found!
    echo Please install VMware Workstation first.
    exit /b 1
)

:: 检查必要工具
where windbg >nul 2>&1
if %ERRORLEVEL% NEQ 0 (
    echo WinDbg not found!
    echo Please install Windows SDK or WDK.
    exit /b 1
)

echo All required tools are available!
```

4. 创建 VMware 专用的调试环境配置文件 `vmware_debug.conf`:

```ini
# VMware Debug Configuration

[Virtual Machine]
Name=ReactOS_Debug
Memory=2048
Processors=2
HDD_Size=20GB
ISO_Path=E:\Reactos_WinDriver\reactos-master\build\bootcd.iso

[Debug]
Pipe_Name=\\.\pipe\ReactOS_Debug
Baud_Rate=115200
Debug_Port=COM1

[Symbols]
Path=E:\Reactos_WinDriver\reactos-master\build\symbols
Source_Path=E:\Reactos_WinDriver\reactos-master
```

5. 创建完整的 VMware 调试环境启动脚本 `start_vmware_environment.bat`:

```batch
@echo off
:: start_vmware_environment.bat
setlocal enabledelayedexpansion

:: 检查环境
call check_vmware_tools.bat
if %ERRORLEVEL% NEQ 0 goto :error

:: 设置路径
set "REACTOS_BUILD=E:\Reactos_WinDriver\reactos-master\build"
set "VM_PATH=E:\VMs\ReactOS_Debug"
set "ISO_PATH=%REACTOS_BUILD%\bootcd.iso"

:: 检查 ISO 文件
if not exist "%ISO_PATH%" (
    echo ReactOS ISO not found at: %ISO_PATH%
    goto :error
)

:: 配置虚拟机
if not exist "%VM_PATH%\ReactOS_Debug.vmx" (
    echo Setting up new VMware virtual machine...
    call setup_vmware.bat
    if %ERRORLEVEL% NEQ 0 goto :error
)

:: 更新 CD-ROM 配置
echo Updating CD-ROM configuration...
(
echo ide1:0.fileName = "%ISO_PATH%"
echo ide1:0.present = "TRUE"
echo ide1:0.deviceType = "cdrom-image"
) >> "%VM_PATH%\ReactOS_Debug.vmx"

:: 启动调试环境
call start_vmware_debug.bat
if %ERRORLEVEL% NEQ 0 goto :error

echo VMware debug environment started successfully!
goto :end

:error
echo Failed to start VMware debug environment!
exit /b 1

:end
endlocal
```

6. 创建调试命令文件 `debug_commands.dbg`:

```
; debug_commands.dbg
; 加载符号
.sympath+ E:\Reactos_WinDriver\reactos-master\build\symbols
.reload

; 设置源码路径
.srcpath+ E:\Reactos_WinDriver\reactos-master

; 常用断点
bp ntoskrnl!KiSystemStartup "g"
bp ntoskrnl!IoInitSystem "g"

; 显示调试信息
!vm
!process 0 0
!drvobj

; 继续执行
g
```

使用说明:

1. 准备工作:
   ```batch
   :: 检查环境
   call check_vmware_tools.bat
   
   :: 设置虚拟机
   call setup_vmware.bat
   ```

2. 启动调试环境:
   ```batch
   call start_vmware_environment.bat
   ```

3. 在 WinDbg 中:
   ```
   ; 加载调试命令
   $$>a< debug_commands.dbg
   ```

4. 调试提示:
   - 使用 `Ctrl+Break` 中断执行
   - 使用 `g` 继续执行
   - 使用 `bp module!function` 设置断点
   - 使用 `bl` 查看所有断点
   - 使用 `k` 查看调用栈
   - 使用 `!analyze -v` 分析崩溃

5. 驱动调试:
   ```
   ; 在 ReactOS 中
   load driver.sys
   
   ; 在 WinDbg 中
   bp driver!DriverEntry
   g
   ```

如果你需要特定的调试场景或遇到具体问题,请告诉我,我会提供更详细的指导。
 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网站架构知识之Ansible模块(day021)

1.Ansible模块 作用:通过ansible模块实现批量管理 2.command模块与shell模块 command模块是ansible默认的模块&#xff0c;适用于执行简单的命令&#xff0c;不支持特殊符号 案列01&#xff0c;批量获取主机名 ansible all -m command -a hostname all表示对主机清单所有组…

计算机网络:网络层 —— 软件定义网络 SDN

文章目录 软件定义网络 SDN远程控制器OpenFlow协议SDN 广义转发流表简单转发负载均衡防火墙 SDN 控制器 软件定义网络 SDN 软件定义网络&#xff08;Software Defined Networking&#xff0c;SDN&#xff09;是一种新兴的网络架构&#xff0c;旨在通过网络控制与数据转发的分离…

使用 .NET Core 7 和 SignalR 构建实时聊天应用程序

动动你可爱的小手&#xff0c;请关注下本人公众号&#xff0c;继续为您提供更多原创技术文章。谢谢给为的支持 SignalR 是一个 ASP.NET 库&#xff0c;它支持实时 Web 功能&#xff0c;允许服务器立即将更新推送到客户端&#xff0c;从而提高应用程序的效率和响应能力。它通过简…

响应式网页设计--html

一&#xff0c;HTML 文档的基本结构 一个典型的 HTML 文档包含了几个主要部分&#xff0c;基本结构如下(本文以下出现的所有代码都可以套入下面示例进行测试)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&q…

欢迎 Stable Diffusion 3.5 Large 加入 Diffusers

作为Stable Diffusion 3的改进版本&#xff0c;Stable Diffusion 3.5 如今已在 Hugging Face Hub 中可用&#xff0c;并可以直接使用 &#x1f9e8; Diffusers 中的代码运行。 https://hf.co/blog/sd3 本次发布包含两套模型参数: https://hf.co/collections/stabilityai/stable…

Ubuntu22.04中使用CMake配置运行boost库示例程序

Ubuntu22.04中使用CMake配置运行boost库示例程序 boost是一个比较强大的C准标准库&#xff0c;里面有很多值得学习的东西&#xff0c;比较asio网络库可以用来编写C TCP客户端或者TCP服务端接收程序。本文主要讲解如何在Ubuntu22.04中使用Cmake配置boost库&#xff0c;以及运行…

高效档案管理案例介绍:文档内容批量结构化解决方案解析

一、项目背景介绍 档案文件中包含的内容丰富且形式多样&#xff0c;通常不仅包括文本&#xff0c;还可能包含表格、图片、标题、段落、注释等多种内容元素。传统的档案管理往往依赖人工对文档内容进行归档、分类和标注&#xff0c;这种方式耗时费力&#xff0c;且在管理庞大数…

如何在vscode中安装git详细新手教程

一、安装git后点击vscode中的设置 今天教大家如何在VScode中编写代码后提交到git仓库&#xff0c;如果我们不想切换到git的命令行窗口&#xff0c;可以在VScode中配置git&#xff0c;然后就可以很方便快捷的把代码提交到仓库中。 二、在输入框中输入 git.path &#xff0c;再点…

负梯度方法与Newton型方法-数值最优化方法-课程学习笔记-4

今天我们继续来学习数值最优化方法的第三章内容的后续知识 Newton方法 Newton方法是Newton方法的基础, 本节主要讨论的是基本Newton方法, 阻尼Newton方法以及修正Newton方法的构造和特性, 这类方法适合解决中小型最优化问题 基本Newton方法 对于 f ( x ) f(x) f(x)如果有连续…

element-plus的Tree 树形控件添加图标

该文章为本菜鸡学习记录&#xff0c;如有错误还请大佬指教 本人刚开始接触vue框架&#xff0c;在使用element-plus组件想实现树形控件&#xff0c;发现官网的组件示例没有图标区分显示 实现效果 代码 <temple 部分 <el-tree :data"data" node-click"hand…

Visual Studio Code从安装到正常使用

Visual Studio Code的汉化 下载的Visual Studio Code的话可以去应用商店也可以去官网下载。 Visual Studio Code只是一个编译器&#xff0c;不具备编译器功能。因此需要下载一个编译器MinGW MinGW的安装 官网链接MinGW官网链接 一步到位的链接 添加环境变量 进入cmd界面…

netty之关闭连接源码分析

写在前面 本文看下netty关闭channel相关源码。 1&#xff1a;前置准备 为了测试&#xff0c;我们需要使用netty源码中examples模块的echoserver和echoclient&#xff0c;但是echoclient因为会不断的发送消息&#xff0c;并不会断开连接&#xff0c;所以&#xff0c;我们需要…

Linux(CentOS)yum update -y 事故

CentOS版本&#xff1a;CentOS 7 事情经过&#xff1a; 1、安装好CentOS 7&#xff0c;系统自带JDK8&#xff0c;版本为&#xff1a;1.8.0_181 2、安装好JDK17&#xff0c;版本为&#xff1a;17.0.13 3、为了安装MySQL执行了 yum update -y&#xff08;这个时候不知道该命令的…

基于SpringBoot的“在线考试系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线考试系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统登录界面图 用户注册界面图 管…

Ubuntu 的 ROS 操作系统安装与测试

引言 机器人操作系统&#xff08;ROS, Robot Operating System&#xff09;是一个用于开发机器人应用的开源框架&#xff0c;它提供了一系列功能丰富的库和工具&#xff0c;能够帮助开发者构建和控制机器人。 当前&#xff0c;ROS1的最新版本为Noetic Ninjemys&#xff0c;专为…

学习threejs,将多个网格合并成一个网格

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Geometry 几何体1.2 …

vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法

1、先上个截图&#xff1a; 说明&#xff1a;拖动上面的分隔栏就可以实现&#xff0c;改变左右区域的大小。 2、上面的例子来自官网的&#xff1a; Container 布局容器 | Element Plus 3、拖动的效果来自&#xff1a; https://juejin.cn/post/7029640316999172104#heading-1…

7个常用的JavaScript数组操作进阶用法

文章目录 1、查找数组中的最大值方法一&#xff1a;使用 Math.max 和展开运算符方法二:使用 for 循环逐一比较 2、查找数组中的第二大值方法一&#xff1a;排序后取第二大值方法二&#xff1a;遍历找到第二大值 3、去除数组中的重复项4、合并两个有序数组并保持有序5、旋转数组…

前深度学习时代-经典的推荐算法

参考自《深度学习推荐系统》—— 王喆&#xff0c;用于学习记录。 1.协同过滤 “协同过滤”就是协同大家的反馈、评价和意见一起对海量的信息进行过滤&#xff0c;从中筛选出目标用户可能感兴趣的信息的推荐过程。 基于用户相似度进行推荐的协同过滤算法 UserCF 用户相似度…

FPGA学习笔记#6 Vitis HLS For循环的优化(2)

本笔记使用的Vitis HLS版本为2022.2&#xff0c;在windows11下运行&#xff0c;仿真part为xcku15p_CIV-ffva1156-2LV-e&#xff0c;主要根据教程&#xff1a;跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 学习笔记&#xff1a;《FPGA学习笔记》索引 FPGA学习笔记#1 HLS简介及…