使用VS2012调试ReactOS源码
目录
- 一 下载并安装VS2012
- 二 下载并安装WDK80
- 三 下载ReactOS0315源码
- 四 下载并安装RosBE211
- 五 用RosBE命令行编译ReactOS源码
- 六 用VS2012编译ntoskrnl模块
- 七 制作ReactOS安装盘
- 八 用VirtualBox安装ReactOS
- 九 建立调试环境
- 十 调试ReactOS源码
一. 下载并安装VS2012
我安装的是VS2012_ULT_chs.iso, 网上随便下载
二. 下载并安装WDK8.0
下载地址: http://msdn.microsoft.com/zh-cn/windows/hardware/hh852365
安装完之后打开VS2012, 会发现新建项目中多了一些Driver项目, 菜单栏上也多了一个菜单项DRIVER
三. 下载ReactOS0.3.15源码
下载地址: http://download.reactos.org/reactos/ReactOS/0.3.15/
下载ReactOS-0.3.15-REL-src.zip, 解压缩到D:\ReactOS
四. 下载并安装RosBE2.1.1
下载地址: http://download.reactos.org/reactos/RosBE-Windows/i386/2.1.1/
下载RosBE-2.1.1.exe, 安装完之后记得导入生成的注册表文件, 然后把bin目录添加到环境变量path中
我的安装路径为D:\ProgramFiles\RosBE, 把D:\ProgramFiles\RosBE\Bin添加到环境变量path中
五. 用RosBE命令行编译ReactOS源码
1. 双击ReactOS Build Environment进入编译环境, 因为安装RosBE时选择了ReactOS源码位置, 所以自动进入了D:\ReactOS
2. 输入configure.cmd生成目录output-MinGW-i386
3. 输入cd output-MinGW-i386\host-tools, 进入D:\ReactOS\output-MinGW-i386\host-tools, 输入make 编译生成tools
4. 输入cd ..\reactos, 输入make bootcd, 编译生成bootcd.iso
六. 用VS2012编译ntoskrnl模块
1. 打开VS2012 X86命令行工具, 进入D:\ReactOS, 输入configure.cmd VSSolution生成目录output-VS11-i386
D:\ReactOS\dll\keyboard\kbdcz\kbdcz.c
D:\ReactOS\dll\keyboard\kbdhu\kbdhu.c
D:\ReactOS\modules\rosapps\applications\screensavers\butterflies\lang
D:\ReactOS\modules\rosapps\applications\sysutils\ctm\lang
D:\ReactOS\modules\rosapps\applications\screensavers\cylfrac\lang
D:\ReactOS\dll\win32\kernel32\winnls\nls
D:\ReactOS\modules\rosapps\applications\screensavers\matrix\lang
D:\ReactOS\modules\rosapps\applications\screensavers\mazescr\lang
D:\ReactOS\subsystems\ntvdm\lang
D:\ReactOS\modules\rosapps\applications\screensavers\starfield\lang
D:\ReactOS\base\setup\usetup\lang
七. 制作ReactOS安装盘
八. 用VirtualBox安装ReactOS
1. 下载并安装VirtualBox, 我使用的是VirtualBox-4.3.12-93733
2. 新建虚拟机, 选择载入第七步生成的bootcd.iso
3. 设置串口参数
九. 建立调试环境
1. 打开VS2012(Win7, Win8 要以管理员身份运行), 选择菜单DRIVER -> Test -> Configure Computers, 打开Computer Configuration窗口
2. 点击Add New Computer, 在Computer name:中输入你真实的计算机的名字(不是虚拟机中计算机的名字), 下边三个选项选择最后一项”Manually configure debuggers and do not provision”,手动配置调试
3. 按下图配置调试参数
Connection Type选为Serial (串口)
(波特率)Baud Rate 115200
(管道)Pipe勾选
(重连接)Reconnect勾选
(管道名)Pipe name \\.\pipe\com_debug
这几个选项是根据第八步的虚拟机设置来设置的
最后点击下一步, 完成。
4. 在vs2012中选择菜单 工具 -> 附加到进程, 打开附加到进程窗口
传输:Windows Kernel Mode Debugger
限定符:就是我们上面添加的计算机名
选择Kernel进程, 点击附加进入调试状态
5. 在VirtualBox虚拟机中按Tab+K产生中断, VS2012捕获该中断
十. 调试ReactOS源码
1. 在VS2012中打开源码文件 D:\ReactOS\ntoskrnl\ps\process.c, 在函数PspCreateProcess处按F9下断点
1. 首先下载 源码和RosBE 从网站 https://www.reactos.org
2. 安装好RosBE 并选择好源码目录
3. 进入VS2010的命令行环境, 然后切换到Ros源码目录
4. 如果没有包含RosBE的CMake路径
SET PATH=%PATH%;D:\RosBE\Bin\ (这里假设你将Rosbe安装在D盘的RosBE文件夹)
然后执行 configure.cmd VSSolution
即可生成VS2010的工程 在Ros源码目录的 output-VS10-i386\reactos 目录下
现在我们可以浏览Ros源码了
一:ReactOS简介
ReactOS是一个基于 Windows NT 架构(Windows XP, Windows 7, Windows Server 2012 等均基于 Windows NT 架构)设计原则的开源操作系统。由于所有的代码都经过重新编写,ReactOS 并不是一个基于 Linux 的操作系统,而且不包含任何 UNIX 架构。
ReactOS项目的主要目标是提供一个与 Windows 环境二进制兼容的操作系统。它能让您的 Windows 应用程序和驱动程序如同在 Windows 上一样运行。此外,由于应用了 Windows 操作系统的外观特性,已经熟悉 Windows? 用户界面的用户在使用 ReactOS 时将驾轻就熟。ReactOS 的终极目标是使您能够在感觉不到最终用户体验变化的前提下,使用 ReactOS? 来替代 Windows 。
自由软件倡导者认同自由软件操作系统现状的改善促进了竞争,ReactOS也同样获益匪浅ReactOS是最完整的类 Windows®操作系统的工作平台, 因此,参与开发的程序员需要花费许多精力去学习ReactOS源码 和研究ReactOS开发文档。
ReactOS组件也越来越多,兼容性也越来越好,但 ReactOS 不会有任何束缚。 ReactOS已经并将继续吸收最新版本的Win32 API,跟踪甚至发展最新的操作系统技术 。尽我们所能,使用最新的技术,并不断的融合新的特点到最新版本。简单地说,ReactOS目标就是用您的硬件设备去运行您的应用程序,最后,诞生一个任何人都可以免费使用的 FOSS 操作系统。
二:ReactOS功能概述
到了 2005年,ReactOS 内核已经十分稳定,大多数给上层程序开发使用的API均制作完成,并且拥有了一个基本的GUI窗口界面。ReactOS 已经具有一个与 Windows浏览器类似的 ReactOS Explorer 作为系统操作界面。
- ReactOS 0.2 版可以运行相当多数的 Win32 应用程序,并拥有自己的 Notepad(记事本,基本的文本编辑器)、Regedit(系统注册表编辑器),Cmd(命令行提示符)和几个其他的大型应用(比如 AbiWord 文字编辑器)以及一些游戏(Quake 和 Quake II,Wine 的扫雷克隆)。
- 0.2.5 版主要工作在于声卡、网卡的驱动支持。Lynx文本网页浏览器抓取网页的萤幕撷取图展示了,不过这个功能尚待进一步改进。这个版本更加入了Ext2文件系统和 GRUB boot loader 的支援,让 ReactOS 与 Linux分区 共存。
- 自0.2.6版起,Dillo、mIRC 和网页浏览器Mozilla Firefox的DCOM元件可于ReactOS内运行。部份游戏如 Unreal Tournament 和 Deus Ex 则已知能以软件渲染的方式运作。使用 nVidia-Driver 或者 Mesa 3D 的软模式,OpenGL 的运行只剩下一些小问题。第一个网络服务器Tiny Web Server和 The UltraVNC Client宣布运行成功。从右图可见,OpenOffice(1.x版)也有部份可以执行了。
- 自版本0.2.8,TCP/IP的部份元素开始运作,还有更多的应用程序例如 Notepad、AbiWord、OpenOffice、Deus Ex 和 Unreal Tournament。声音及USB支援尚在制作中(SB16半工作、USB OHCI 和 UHCI 则仍须劳力) USB功能“借”自 Cromwell。Plug and Play的开发工作、与及WDM的支持亦已展开。除了字符网页浏览器Lynx,ReactOS 更可以以 Mozilla 的 DCOM元件以图像方式浏览网页。
- ReactOS 0.2.8 能侦测自己是否在 VMWare 中运行,继而到 VMWare Tools ISO 安装SVGA驱动以提供更佳的GUI表现。CSRSS 经已完全重写, 一个“重头写起”的 Ws2_32 也预计即将完工。在Trunk里面有些运作上还可以的ddraw,dplay和dplayx元素。
三:ReactOS开源官网
ReactOS开源网站的网址:https://www.reactos.org/ ,官网截图如下所示:
三:ReactOS开源代码的架构
用一张ReactOS源代码的架构图片,来说明更有价值些,如下所示:
我这里下载的是ReactOS-0.3.15,最新版本的是React-0.3.16,我们下载最新版本的,我只是想研究和了解下WINDOWS NT的内核架构,所以代码的版本并不是很重要!
源码的下载网址为:http://sourceforge.net/projects/reactos/files/
有空慢慢分析ReactOS的设计思想,当然也会借鉴WINCE的OS的思想,两者结合起来分析吧……
1: 首先从https://www.reactos.org/wiki/ReactOS_Build_Environment下载Reactos BE 工具,安装时会让指定ReactOS的源代码文件夹路径,安装完成后桌面会自动生成一个注册表文件,将这个注册表文件导入
2: 打开VS2012命令行工具,切换到ReactOS源码文件夹,键入命令 configure.cmd VSSolution ,之后会在源码目录生成VS的工程.over
ReactOS 是一个基于 Windows NT 架构设计原则的开源操作系统。ReactOS 项目的主要目标是提供一个与 Windows 环境二进制兼容的操作系统。它能让您的 Windows 应用程序和驱动程序如同在 Windows 上一样运行。此外,由于应用了 Windows 操作系统的外观特性,已经熟悉 Windows 用户界面的用户在使用 ReactOS 时将驾轻就熟。ReactOS 的终极目标是使您能够在感觉不到最终用户体验变化的前提下,使用 ReactOS 来替代 Windows。
工具/原料
- VMware workstation 虚拟机
- React OS系统镜像
配置虚拟机
- 1打开VMware workstation,点击创建新的虚拟机
- 2安装来源选择你事先下载好的react os 镜像
- 3选择客户机操作系统。由于VMware虚拟机不提供react os操作系统简易安装,又因为ReactOS 是一个基于 Windows NT 架构设计原则的开源操作系统,因此选择windows NT作为客户机操作系统。
- 4更改虚拟机名称,安装位置等。。。磁盘大小根据个人需要合理选择。
- 5查看虚拟机配置,完成设置,开启虚拟机。
React OS系统基础安装
- 1开启虚拟机后,出现安装画面。语言最好还是选择英语,如果你选择简体中文【Chinese(PRC)】,最坏的情况就是在以后的安装界面中,中文无法显示,界面里全是方框(有密集恐惧症的千万别试TAT)。
- 2你看得懂英文也好,看不懂也罢,反正后面的使劲按Enter键就行了(如果你不打算分区的话)。大致意思是欢迎安装React OS,它还处于早期发展阶段,不能完美支持所有的基础应用,以及安装配置。
- 3(如果你打算分区,出现下面界面时,按上下键选择系统安装分区;按Enter在高亮显示的分区中安装系统;按c创建分区;按d删除已有分区)
- 4格式化分区。提供fat和ext2两种文件系统格式,其中fat多用于windows系统,而ext2多用于linux系统。(这两种文件系统格式都算得上是老古董了。。。)
- 5选择安装根目录
- 6按Enter开始安装
- 7在硬盘上安装引导程序(MBR和UBR)即第一项。没事你选最后一项干啥。。。
- 8React OS基础部分就安装完了,按Enter重启。
React OS 驱动安装及系统基础设置
- 1每次开启都有这个引导界面,默认第一项就行。
- 2欢迎界面及GPL许可证查看界面
- 3更改系统设置和键盘布局设置,填写用户名称及密码,设置时区和时间
- 4安装VMware tools时,一定要注意先在虚拟机目录中点安装VMware Tools,再点next。(按Ctrl+Alt键释放鼠标)【不懂原因看英文】
- 5完成安装。重启开始探索React OS吧
注意事项
- React OS仍在 alpha 试验阶段,建议不要在React OS环境下进行比较重要的工作。
- React OS能兼容的硬件和软件比较有限,但稳定性比较好,并且开源免费。
- 安装中或安装完后遇到问题的可以多逛一下React OS官网或论坛。
使用VS2012调试ReactOS源码的更多相关文章
- 查看和调试Qt源码
简述 在调试程序的时候,有时需要调试进入 Qt 源码,这不仅有利于我们了解内部实现机制,而且对于解决一些隐蔽性问题很有帮助. 都知道 F11 是“单步进入”,可是在调试的过程中,按下 F11 却无法进 ...
- 查看和调试Qt源码(动态编译的QT也可进入源码)good
简述 在调试程序的时候,有时需要调试进入 Qt 源码,这不仅有利于我们了解内部实现机制,而且对于解决一些隐蔽性问题很有帮助. 都知道 F11 是“单步进入”,可是在调试的过程中,按下 F11 却无法进 ...
- 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码
前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...
- Android动态方式破解apk进阶篇(IDA调试so源码)
一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...
- Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)
一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk 主要采用的是静态方式,步骤也很简单,首先使用 ...
- Apache Spark源码走读之18 -- 使用Intellij idea调试Spark源码
欢迎转载,转载请注明出处,徽沪一郎. 概要 上篇博文讲述了如何通过修改源码来查看调用堆栈,尽管也很实用,但每修改一次都需要编译,花费的时间不少,效率不高,而且属于侵入性的修改,不优雅.本篇讲述如何使用 ...
- eclipse调试jdk源码
摘要 介绍使用eclipse调试jdk源码 java是一门开源的程序设计语言,喜欢研究源码的java开发者总会忍不住debug一下jdk源码.虽然官方的jdk自带了源码包src.zip,然而在debu ...
- Android NDK调试C++源码(转)
[原创文章,转载请保留或注明出处,http://download.csdn.net/download/bigmaxim/5474055] 1. 相关软件 adt-bundle-windows-x86. ...
- Linux+eclipse+gdb调试postgresql源码
pg内核源码解析课上用的vs调试pg源码, VS用起来确实方便,但是配置调试环境着实有点麻烦.首先得装个windows系统,最好是xp,win7稍微麻烦点:最好使用vs05,08和10也可以,但是比0 ...
随机推荐
- maven 打war包tomcat服务器乱码问题
今天用maven3的命令打war包,命令是mvn clean package -Dmaven.test.skip=true,打包后放在tomcat跑起来后发现tomcat的日志出现乱码. 后来在pom ...
- Android first--SharedPreferences
public class MainActivity extends Activity { private EditText et_name; private EditText et_pass; ...
- 关于 DevExpress.XtraTreeList.TreeList 树形控件 的操作
作为一个C#程序员,在写程序时一直以来都使用的微软那一套控件,用起来特别爽,可是最近公司的一个项目用到了DevExpress框架,不用不知道,一用吓一跳,不得不承认这个框架确实很强大,效果也很炫,但是 ...
- JAVA-小青蛙跳石头游戏
游戏摘自微信传的手机网页版小游戏,我拿来做成了JAVA的界面版,但是没有去做素材,,直接拿方块代替小青蛙.游戏原址就不分享了,只能在手机上打开. 下面是源码: /* * Main.java * */ ...
- php变量赋值给js
1 2 3 4 5 6 7 8 $(document).ready(function(){ <?php $f="'name'"?> ...
- Spark学习(三) -- SparkContext初始化
标签(空格分隔): Spark 本篇博客以WordCount为例说明Spark Job的提交和运行,包括Spark Application初始化.DAG依赖性分析.任务的调度和派发.中间计算结果的存储 ...
- Upload Files To FTP in Oracle Forms D2k
Upload Files To FTP in Oracle Forms D2k Use following procedure to upload files to Ftp. PROCEDURE ...
- color.xml
写控件的时候经常会遇到颜色选择问题,下面贴出常用颜色表示,方便选择. <?xml version="1.0" encoding="utf-8"?>& ...
- IIS设置session时长
打开IIS管理器,选择要设置的session的网站,打开右边窗口的会话状态.选择状态服务器,设置连接字符串,并在服务管理开户状态服务 ASP.NET State Service
- Rails中的缓存
最近学习Rails. 看到如下代码: <% if notice %> <p id="notice"><%= notice %></p> ...