﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-小站随笔</title><link>http://www.cppblog.com/batstying/</link><description>大道至简，知易行难</description><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:06:40 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:06:40 GMT</pubDate><ttl>60</ttl><item><title>test</title><link>http://www.cppblog.com/batstying/archive/2014/09/18/208354.html</link><dc:creator>batstying</dc:creator><author>batstying</author><pubDate>Thu, 18 Sep 2014 11:23:00 GMT</pubDate><guid>http://www.cppblog.com/batstying/archive/2014/09/18/208354.html</guid><wfw:comment>http://www.cppblog.com/batstying/comments/208354.html</wfw:comment><comments>http://www.cppblog.com/batstying/archive/2014/09/18/208354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/batstying/comments/commentRss/208354.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/batstying/services/trackbacks/208354.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;&lt;iostream.h&gt;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;CDate<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDate();<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDate(<span style="color: #0000FF; ">int</span>&nbsp;nYear,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nMonth,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nDay);<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">private</span>:<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;m_nYear;<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;m_nMonth;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;m_nDay;<br /><span style="color: #008080; ">12</span>&nbsp;};<br /><span style="color: #008080; ">13</span>&nbsp;CDate::CDate()<br /><span style="color: #008080; ">14</span>&nbsp;{<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nYear&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nMonth&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nDay&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">18</span>&nbsp;}<br /><span style="color: #008080; ">19</span>&nbsp;CDate::CDate(<span style="color: #0000FF; ">int</span>&nbsp;nYear,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nMonth,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nDay)<br /><span style="color: #008080; ">20</span>&nbsp;{<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nYear&nbsp;=&nbsp;nYear;<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nMonth&nbsp;=&nbsp;nMonth;<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nDay&nbsp;=&nbsp;nDay;<br /><span style="color: #008080; ">24</span>&nbsp;}<br /><span style="color: #008080; ">25</span>&nbsp;<br /><span style="color: #008080; ">26</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;CStudent<br /><span style="color: #008080; ">27</span>&nbsp;{<br /><span style="color: #008080; ">28</span>&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CStudent();<br /><span style="color: #008080; ">30</span>&nbsp;<span style="color: #0000FF; ">private</span>:<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;m_nAge;<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDate&nbsp;date;<br /><span style="color: #008080; ">33</span>&nbsp;};<br /><span style="color: #008080; ">34</span>&nbsp;CStudent::CStudent()<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:date(1989,1,26)<br /><span style="color: #008080; ">36</span>&nbsp;{<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;"CStudent::CStudent()"&lt;&lt;endl;<br /><span style="color: #008080; ">38</span>&nbsp;}<br /><span style="color: #008080; ">39</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;argv[])<br /><span style="color: #008080; ">40</span>&nbsp;{<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CStudent&nbsp;stu;<br /><span style="color: #008080; ">42</span>&nbsp;}</div></div></div></div><img src ="http://www.cppblog.com/batstying/aggbug/208354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/batstying/" target="_blank">batstying</a> 2014-09-18 19:23 <a href="http://www.cppblog.com/batstying/archive/2014/09/18/208354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发驱动 搭建环境[下]Windbg+Vmware/VirutalBox内核调试加速工具VirtualKD</title><link>http://www.cppblog.com/batstying/archive/2010/05/08/114882.html</link><dc:creator>batstying</dc:creator><author>batstying</author><pubDate>Sat, 08 May 2010 14:03:00 GMT</pubDate><guid>http://www.cppblog.com/batstying/archive/2010/05/08/114882.html</guid><wfw:comment>http://www.cppblog.com/batstying/comments/114882.html</wfw:comment><comments>http://www.cppblog.com/batstying/archive/2010/05/08/114882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/batstying/comments/commentRss/114882.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/batstying/services/trackbacks/114882.html</trackback:ping><description><![CDATA[如果你正在使用Windbg+Vmware或Windbg+VirtualBox进行内核调试，并且觉得虚拟串口方式过于缓慢，那么这个就是你最需要的东西了！它可以大幅提升调试时数据传输的速度，实在是居家旅行、杀人灭口，必备良药~~(后悔用得太晚了)<br>这是一个开源项目，工程在sourceforge上:<br><a href="http://sourceforge.net/projects/virtualkd/"><u><font color=#800080>http://sourceforge.net/projects/virtualkd/</font></u></a><br>原理和Vmkd差不多，但是使用范围更广，安装更简单了。我简单讲一讲在Vmware上如何使用。
<p><strong><font color=#ff0000>一、准备工作</font><br></strong>从上面的网址下载VirtualKD-2.2.zip(当前版本为2.2)，并解压出来。应该会有以下文件:<br><font color=#ff0000><strong>二、Guest OS中相应部分的安装</strong></font><br>启动虚拟机中的GuestOS,然后把上面的target文件夹的内容全部拷贝到GuestOS中。<br>运行vminstall.exe。<br>这里相关的东西除了拷贝文件外添加服务外，其实就是新添加一个DEBUG模式的启动菜单，就是更改boot.ini(如图中红框部分所示)，但是这一切由vminstall.exe来完成。<br><br>不过我发现vminstall.exe好像有个小Bug，新添加的启动入口并没有名称显示，你可以打开boot.ini自己加上。如果是Vista或Win7的话，使用如下命令:<br>bcdedit /set dbgtransport kdvm.dll<br>这个装好后，GuestOS中的部分就完成了。</p>
<p><strong><font color=#ff0000>三、HOST OS中相应部分的安装</font><br></strong>实际上VirtualKD完全绿色，不需要安装，只要找个合适的地方放好，然后运行vmmon.exe就可以了~~<br>vmmon.exe会自动找到vmware-vmx.exe并显示在上面，并显示它的一些详细信息。<br>然后在界面下方的位置你会看到一些设置选项：<br>Start debugger automatically:GuestOS启动时自动启动调试器<br>Stop debugger automatically:退出时自动关闭调试器(经测试好像不好使)<br>DbgBreakPoint() on start:系统启动时的第一时间就中断下来<br>TraceAssist params:该功能是把虚拟机GuestOS的DbgPrint输出记录到文件，而不是发送到调试器，这样可以在输出特别频繁时提高性能<br>Debugger path:调试器路径，这里选择你的Windbg就可以了<br>Unpath process/Repath process:动态地对vmware_vmx.exe进行Patch或恢复(这也是VirtualKD功能的核心)<br>Run debugger:启动设置好的调试器<br>Close:退出vmmon.exe</p>
<p>在HOST端我们要做的工作将会非常简单，只需要在Vmware中启动虚拟机的同时启动vmmon.exe就可以了。剩下的vmmon.exe都会替我们做好(动态查找vmware-vmx.exe并进行Patch).<br>如果你选上了Start debugger automatically那么虚拟机中GuestOS启动的同时vmmon会自动帮你打开调试器，非常方便。<br>如果你仍然想像以前那样自已通过加参数的方式启动windbg进行双机调试，那么它的参数可以这么写:<br>"C:\Program Files\Debugging Tools for Windows\windbg.exe" -k com:port=\\.\pipe\kd_WinXP,pipe<br>关键就是这个管道的名称，也就是kd_&lt;你的GuestOS的安装目录&gt;.比如我的XP虚拟机安装目录在E:\Vmware\WinXP，那么管道名称就是kd_WinXP.<br>实际上也就是虚拟机系统的*.vmx文件所在的文件夹的名字。<br>更方便一点，直接看vmmon里显示的管道名称就可以了。<br><span><br></span><br>如果你使用的是这种内存动态Patch方式的话，因为总是要运行vmmon.exe，建议还是选上自动启动调试器，会方便一点。或者可以按照readme.txt中的相关介绍直接进行永久性文件Patch，这样就不需要运行vmmon.exe了,详情可参考readme.txt。<br>另外，VirualKD还解决了一个BUG，就是GuestOS中断在调试器时会大量占用CPU的问题，这个也很爽了。搞完这些之后，调试时数据传输的速度将会大幅提升，你就可以体验极速的感觉了~~~</p>
<img src ="http://www.cppblog.com/batstying/aggbug/114882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/batstying/" target="_blank">batstying</a> 2010-05-08 22:03 <a href="http://www.cppblog.com/batstying/archive/2010/05/08/114882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发驱动 搭建环境【上】 VS2008 + WDK7600.1</title><link>http://www.cppblog.com/batstying/archive/2010/05/08/114798.html</link><dc:creator>batstying</dc:creator><author>batstying</author><pubDate>Fri, 07 May 2010 16:12:00 GMT</pubDate><guid>http://www.cppblog.com/batstying/archive/2010/05/08/114798.html</guid><wfw:comment>http://www.cppblog.com/batstying/comments/114798.html</wfw:comment><comments>http://www.cppblog.com/batstying/archive/2010/05/08/114798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/batstying/comments/commentRss/114798.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/batstying/services/trackbacks/114798.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/batstying/archive/2010/05/08/114798.html'>阅读全文</a><img src ="http://www.cppblog.com/batstying/aggbug/114798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/batstying/" target="_blank">batstying</a> 2010-05-08 00:12 <a href="http://www.cppblog.com/batstying/archive/2010/05/08/114798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>