内核环境配置
来源:互联网 发布:如何在淘宝买三唑仑 编辑:程序博客网 时间:2024/05/16 07:49
虽然按照前面的设置,读者已经可以编译一个内核程序并在自己的计算机上运行了,但是这样的做法是不明智的,因为一旦出现错误就会出现蓝屏,这时代码就会丢失。比较明智的做法是安装一个虚拟机,然后把安装好的sys文件放在虚拟机中运行。
1.下载安装WinDbg
WinDbg似乎是微软的御用调试工具,不但可以调试内核,也可以调试应用程序,但是在调试内核时被设计为双机调试,即需要一台计算机(下面称之为调试机)来调试被调试的计算机(被调试机),WinDbg必须安装在调试机上,调试机与被调试机通过串口相连接。可能调试机和被调试机我说的有点啰嗦,我这么一说大家就明白了,我的计算机是Win7系统,充当调试机,虚拟机中安装XP系统,当做被调试机,我在Win7上写好代码编译之后产生的.sys文件拷贝到XP上,在XP上运行,WinDbg安装在Win7上,通过设置WinDbg和VMware,调试产生的信息会在WinDbg上显示出来。
2.设置Windows XP调试执行
我们调试代码需要让XP设置为调试执行,我们这样做:首先在文件夹选项中设置为显示所有文件,不隐藏系统保护文件,然后找到boot.ini文件,修改boot.ini文件为:
[boot loader]timeout=30default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS[operating systems]multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetectmulti(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP Debug" /noexecute=optin /debug /debugport=com2 /baudrate=115200保存,重启系统会发现出现这样的选择项:
3.设置VMware的管道虚拟串口
在调试机是虚拟机的情况下,需要在虚拟机上生成一个用管道虚拟的串口,打开VMware,不要启动,按照以下步骤操作:
(1)右键->设置->添加->串行端口,点击下一步按钮
(2)选择输出到命名管道,点击下一步
(3)前两个保持不变,打三个选择另一端是应用程序,点击完成
虚拟机这样就可以了,下面是调试机上WinDbg的启动参数,使之连接一个管道,并把这个管道当做一个串口处理。
有一个比较简单的做法是在桌面上建立一个windbg.exe的快捷方式,单击右键并选择属性,在快捷方式中,在目标之后增加新的启动参数。我的是这样的:
C:\WinDDK\Debuggers\windbg.exe -d -k com:pipe,port=\\.\pipe\com_1,baud=115200打开虚拟机,启动到调试模式下的Windows之后,打开WinDbg,就可以进行调试了,WinDbg上会显示连接上的信息。刚刚连接上的时候,虚拟机里的Windows系统会被中断,这时在WinDbg的命令提示符kd>后面输入g并按回车就可以了。
4.设置Windows内核符号表。
在调试连接上之后,打开WinDbg的主菜单File下的Symbol File Path,在这里输入符号表的位置,符号表和sys产生在同一个目录下,所以只要指定所在的i386目录就可以了。此外需要指定Windows的内核符号表,这些符号表需要从网上下载,但是没有必要自己去下载,可以在Symbol File Path中增加这么一句:
SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols这条设置使WinDbg自动从微软网站上下载,首次使用比较慢,其实是在下载符号表,打开C:\symbols查看,这个路径可以指定为其他的位置。注意下载不一定总是成功,请多试几次。用WinDbg开始调试虚拟机的情形:
5.调试first
我的WinDbg符号表路径为:
F:\Driver_work\first\objchk_win7_x86\i386;SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols我的源代码设置路径为:
F:\Driver_work\firstfirst这个驱动是什么都没有做,所以在加载之后DriverEntry会被执行一次,之后卸载的时候会执行DriverUnload.我们来运行一下:
为了我们能看到每一步,我们在DriverEntry中加载一个断点。我们在源码中加入
#if DBG _asm int 3#endif再次运行的时候会发现源码自动弹出,光标停留在断点位置:
这里的int 3是一句汇编指令,执行到它的时候程序会断下来,等于手工加了一个断点。加上宏DBG测试,保证只有调试版本这条语句才会被编译。
- 配置编译内核环境
- 内核环境配置
- VS2010内核开发环境配置
- Windows内核开发调试环境配置详解
- ubuntu内核驱动模块变成环境配置
- systemtap安装&内核调试环境配置
- Android内核源码阅读环境配置
- window 内核驱动开发环境配置
- Android内核编译、调试环境配置
- 在Cygwin环境下配置Linux内核的问题
- VS2008+DDKWIZARD+WDK基于WIN7内核编程环境配置
- Linux驱动开发环境配置(内核源码树构造)
- Linux驱动开发环境配置(内核源码树构造)
- 配置和使用linux内核调试环境(基于虚拟机)
- Linux驱动开发环境配置(内核源码树构造) --------转
- [linux]驱动开发环境配置(内核源码树构造)
- Linux驱动开发环境配置(内核源码树构造)
- linux驱动开发环境配置 构造内核源代码树
- Java socket参数keepalive
- 飞鸽传书原理以及相关代码详解
- rocketmq3.26研究之四DefaultMQProducer
- 【方便查】git bash命令(仓库内)
- mysql update from
- 内核环境配置
- Android 复制文本代码段
- linux中source、bash命令区别
- 开发工具,适配器BaseAdapter
- IOS学习 UIView 页面布局
- solr跨core查询
- photoshop的页面图的长度与宽度获取
- 【shiro】shiro学习笔记3-散列功能
- 【Redis学习笔记(七)】 Redis中的事务