设为首页 收藏本站
查看: 867|回复: 0

[经验分享] NDIS调试环境搭建WINDbg+VMware[NDIS之三]

[复制链接]

尚未签到

发表于 2015-10-9 09:17:44 | 显示全部楼层 |阅读模式
                                            
                                                   只有初学者才能理解初学者的痛苦。
  
  目前网上能找到的内核程序调试环境大都是使用WINDbg+VMware的,也咨询了公司的一个老鸟,他也一直这么调试。下面结合网上的一些教程和自己实际的操作整理如下:
  准备软件:
  1、WINDbg
  http://msdn.microsoft.com/en-us/windows/hardware/gg463009
  2、VMware
  随便找。
  3、操作系统安装软件
  随便找。
  4、windows符号表
  http://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx
  
部署之前部署之前
  在准备安装软件、配置环境之前需要明晰以下东西。
   DSC0000.jpg
  1、上图摘自WINDbg的帮助文档,通过这个图可以比较清晰的看出两台机器的关系:TARGET机器在调试模式下运行调试版的NDIS驱动,而HOST机器运行WINDbg调试程序。两者之间通过某种方式进行通信,TARGET机器的内核运行情况都反映在WINDbg上,而WINDbg可以控制TARGET机器的调试模式下的内核运行。
  在目前的双机联调方案中,真实机器就是HOST,使用VMware虚拟一个操作系统作为TARGET,两者之间使用命名管道pipe通信。
  2、两台机器上的操作系统可以不一致,例如我的环境HOST是64位的win7,TARGET是32位的winXP。TARGET是调试环境,即如此安装操作系统,我只能调试32位的驱动。但是因为我HOST是64位的,所以我在HOST上安装的WINDbg也是64位的。当然这里安装哪个版本的WINDbg并不是一一对应,具体的标准请参照WINDbg帮助文档的Choosing a 32-Bit or 64-Bit Debugger Package来选择安装哪一版本的WINDbg。
  3、虚拟机里的系统在调试模式下运行,这也就是目标环境,所以我们想要调试的驱动的版本跟这个虚拟机里运行的TARGET系统是需要一样的,都是64或者都是32位。
  4、最后再说一下windows符号表,这个东西我也不是很理解,不过我分析它必须跟你TARGET的操作系统版本一致。虽然windows符号表是装在HOST主机中。因为这个符号表是提供给WINDbg调试目标机的内核使用的。
  根据以上内容,我的软件安装情况是
  HOST(酷睿i5-2430m,win7、64位旗舰版):
  WINDbg for windows(X64),其实没有单独装,是安装WDK附带的;
  windows xp pacekt3 符号表
  VMware workstation某版本
  在VMware中安装WINDOWS XP 补丁3版作为TARGET。
  配置
  1、在VMware中为虚拟出的TARGET配置一个com端口。点击“Edit virtual machine settings",添加一个Serial Port,选择Output to named pipe,然后下一步时,第一个框保持默认的\\.\pipe\com_1,第二个框里选择Thisend is the server,第三个框选择The other end is an application,选中Connect at power on选项,在I/O mode中勾选Yield CPU on poll选项。
   DSC0001.jpg
  2、进入TARGET的操作系统,修改boot.ini文件,打开此文件在最后一行添加:(直接复制即可)
  multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debug /debugport=com1 /baudrate=115200
  怎么找到修改boot.ini或者win7的怎么办之类的单独上网百度吧,上面的语句可以让你在TARGET系统启动时经选择进入调试模式,其中debugport = com1这句挺关键,调试信息的输出是往com1上输出的,这一点要和你在VMware中添加的那个Serial Port的编号一致。以我的配置为例,在虚拟机中我添加的那个COM端口就是com2,所以这里我修改成debugport=com2。
  3、进入TARGET的操作系统,设备管理器,找到步骤1时添加的端口,将波特率修改成115200.
  4、接下来配置WINDbg。这里网上一般都是添加一个快捷方式,我觉得也挺方便的。
  右键->新建->快捷方式,在“请键入对象的位置”输入下行,引号中是你windbg的安装目录,-y后面是你windows符号表的路径,port=\\.\pipe\com_1与虚拟机中设置的管道名一致。
  "C:\Program Files\Debugging Tools for Windows (x86)\windbg.exe" -y C:\Windows\Symbols\ -b -k com:pipe,port=\\.\pipe\com_1
  以上配置完成。
  调试
  1、启动VMware进入TARGET系统,启动页面选择第二个选项进入调试模式。点击之前制作的WINDbg快捷方式。配置正确的话会显示双方链接成功,如下图:
   DSC0002.jpg
  2、在WINDbg中设置symbol path,即在菜单file中的symbol path中把windows符号表的目录和驱动的PDB路径都加进去。以我的为例:c:\Windows\Symbols;G:\代码\小九\NetworkAnalyzer\NARNDISpassthru\objchk_win7_x86\i386
  勾选reload点击OK。
  3、使用windbg的命令“bu 驱动名字!driverentry”设置一个断点,当驱动在TARGET中加载时就会中断。此时你可以在
  windbg中进行单步跟中了。
  
  后续
  1、在TARGET中如何加载你的驱动?我用的srvinstw先添加服务,然后在cmd中使用net start启动驱动。这个上网找就行。
  2、怎么调试?我也没啥经验,看windbg的帮助和实际去调吧。
  
  

  
         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-124560-1-1.html 上篇帖子: vmware 快照及克隆技术维护自己的虚拟机 下篇帖子: VMware安装linux过程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表