﻿<?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/crhackos/</link><description>新我的游乐园</description><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 16:07:40 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 16:07:40 GMT</pubDate><ttl>60</ttl><item><title>解决部分在 WinXP 下无法运行程序的问题</title><link>http://www.cppblog.com/crhackos/archive/2017/02/12/214677.html</link><dc:creator>CrHackOS</dc:creator><author>CrHackOS</author><pubDate>Sun, 12 Feb 2017 12:15:00 GMT</pubDate><guid>http://www.cppblog.com/crhackos/archive/2017/02/12/214677.html</guid><wfw:comment>http://www.cppblog.com/crhackos/comments/214677.html</wfw:comment><comments>http://www.cppblog.com/crhackos/archive/2017/02/12/214677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/crhackos/comments/commentRss/214677.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/crhackos/services/trackbacks/214677.html</trackback:ping><description><![CDATA[<div>　　有一些程序之所以无法在 WinXP 下运行，除了子系统版本号之外，还有编译器 C 库的原因。VC2012 和 VC2013 在打某个补丁之前编译出来的 EXE/DLL 会使用到 Vista 以后才有的系统 API 函数。无法运行的现象是：&#8220;无法定位程序输入点 XXX 于动态链接库 KERNEL32.DLL&#8221;。在没有源代码重新编译的情况下，我做了一个中间跳转的代理库，基本可以解决这个问题。原理很简单，就是系统有这个 API 函数就直接跳转过去，没有就使用自己实现的替换函数。下载地址在这里：<a href="https://github.com/prefetchnta/questlab/raw/master/bin/kernel33.dll">https://github.com/prefetchnta/questlab/raw/master/bin/kernel33.dll</a>。由于这个只是用来解决我所遇到的无法运行的问题的，因此并没有补完所有 WinXP 缺失的函数（也不可能全补完），同时只映射了绝大部分 KERNEL32.dll 的 API 函数（大概 99%），所以并不能解决所有的此类问题。但是原理上是行得通的，而且也已经开源了（QuestLAB 里的 BackPort 子项目）。使用的方法就是把 EXE/DLL 导入表的 KERNEL32.dll 字符串改成 KERNEL33.dll 即可。<br />
</div><img src ="http://www.cppblog.com/crhackos/aggbug/214677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/crhackos/" target="_blank">CrHackOS</a> 2017-02-12 20:15 <a href="http://www.cppblog.com/crhackos/archive/2017/02/12/214677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC2013 编译的程序在 XP 下运行的一些事</title><link>http://www.cppblog.com/crhackos/archive/2015/03/19/210105.html</link><dc:creator>CrHackOS</dc:creator><author>CrHackOS</author><pubDate>Thu, 19 Mar 2015 08:02:00 GMT</pubDate><guid>http://www.cppblog.com/crhackos/archive/2015/03/19/210105.html</guid><wfw:comment>http://www.cppblog.com/crhackos/comments/210105.html</wfw:comment><comments>http://www.cppblog.com/crhackos/archive/2015/03/19/210105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/crhackos/comments/commentRss/210105.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/crhackos/services/trackbacks/210105.html</trackback:ping><description><![CDATA[<div>　　选择 v120_xp 平台工具集即可使程序兼容 XP 系统。其实质就是加了一个 _USING_V110_SDK71_ 的宏，使用老版本的 Windows SDK，来防止用到 XP 没有的系统 API。另外就是链接器里把子系统的版本号定义成 5.1 了（默认是 6.0）。我做了一下实验，发现子系统的版本号只对 EXE 有效。6.0 的 EXE 在 XP 下运行会提示不是有效的 Win32 程序，而 DLL 似乎不会受到这个限制。所以只要没有用到 XP 没有的 API，VC2013 编译的 DLL 可以直接使用，而 EXE 相差的其实就是那个版本号。（这里的 VC2013 是打过最新的 Update 的，XP 是 SP3 的。）</div><img src ="http://www.cppblog.com/crhackos/aggbug/210105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/crhackos/" target="_blank">CrHackOS</a> 2015-03-19 16:02 <a href="http://www.cppblog.com/crhackos/archive/2015/03/19/210105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tesseract-OCR VS2010 build</title><link>http://www.cppblog.com/crhackos/archive/2015/01/24/209630.html</link><dc:creator>CrHackOS</dc:creator><author>CrHackOS</author><pubDate>Sat, 24 Jan 2015 09:12:00 GMT</pubDate><guid>http://www.cppblog.com/crhackos/archive/2015/01/24/209630.html</guid><wfw:comment>http://www.cppblog.com/crhackos/comments/209630.html</wfw:comment><comments>http://www.cppblog.com/crhackos/archive/2015/01/24/209630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/crhackos/comments/commentRss/209630.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/crhackos/services/trackbacks/209630.html</trackback:ping><description><![CDATA[<div>Open source libraries for Android and Windows.</div><a href="https://github.com/prefetchnta/mybuild">https://github.com/prefetchnta/mybuild</a><br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/crhackos/tesseract.png" width="585" height="45" /><br /><br /><div>　　官方只有 3.02 版的 VS2008 编译的最终二进制。为了完全去掉 WinSXS 的 CRT 依赖（强迫症），花了一天时间把所有依赖库全都用 VC10 编译了一遍（网上有个不纯洁的版本，混杂了调试版的 CRT），顺便都升级到最新的了。以后用到的一些开源库（没有官方二进制或依赖库还是几万年前的版本）也放到这个仓库里来。<br /><br /> </div><img src ="http://www.cppblog.com/crhackos/aggbug/209630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/crhackos/" target="_blank">CrHackOS</a> 2015-01-24 17:12 <a href="http://www.cppblog.com/crhackos/archive/2015/01/24/209630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>嵌入式 Linux 下关闭串口控制台输出</title><link>http://www.cppblog.com/crhackos/archive/2014/08/16/208032.html</link><dc:creator>CrHackOS</dc:creator><author>CrHackOS</author><pubDate>Sat, 16 Aug 2014 05:23:00 GMT</pubDate><guid>http://www.cppblog.com/crhackos/archive/2014/08/16/208032.html</guid><wfw:comment>http://www.cppblog.com/crhackos/comments/208032.html</wfw:comment><comments>http://www.cppblog.com/crhackos/archive/2014/08/16/208032.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/crhackos/comments/commentRss/208032.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/crhackos/services/trackbacks/208032.html</trackback:ping><description><![CDATA[<div>　　最近在玩新唐的 N32926。这颗芯片最大的优势就是把 DDR 内存和 ARM9 的芯片做在一起了，提供非 BGA 的芯片封装（QFP128）。比起三星之类的硬件可以简单不少，性价比也不错。缺点就是，可能是封装管脚太少的缘故，很多功能都是复用的，导致管脚资源紧张。例如，以太网接口和8位以上的 LCD 屏接口是冲突的。以太网切换到第二端口上又和一个串口冲突。本来芯片上就只有两个串口。这就造成，所有的串口设备必须要挂在同一个串口上，用一个模拟开关芯片去切换。可恶的是，Linux 内核和控制台也会时不时的输出东西。但是又不想彻底关掉它们，到时候还能看看调试信息。所以就去找了一下如何临时关闭控制台输出的方法。</div>
<div>　　临时关闭控制台输出（打开控制台输出即是把 tty0 重新设置为默认终端输出）：</div>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 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; ">1</span>&nbsp;<span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fd;<br />
</span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">fd&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;open(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/dev/tty1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;O_RDONLY);<br />
</span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(fd&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ioctl(fd,&nbsp;TIOCCONS);<br />
</span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;close(fd);<br />
</span><span style="color: #008080; ">7</span>&nbsp;<span style="color: #000000; ">}</span><span style="color: #008080; "></span> <span style="color: #000000; "></span></div>
<div>　　临时关闭内核信息输出：echo 0 &gt; /proc/sys/kernel/printk；重新打开内核信息输出：echo 7 &gt; /proc/sys/kernel/printk。</div>
<div>　　这样，要用串口设备的时候，就先临时关闭，然后开关切换，搞完之后再切回来，最后打开输出。好在使用的串口设备都是被动的，可以临时用一下的，不用一直挂在上面，不然就麻烦了。</div>
<img src ="http://www.cppblog.com/crhackos/aggbug/208032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/crhackos/" target="_blank">CrHackOS</a> 2014-08-16 13:23 <a href="http://www.cppblog.com/crhackos/archive/2014/08/16/208032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RSA 算法简单流程及注意事项</title><link>http://www.cppblog.com/crhackos/archive/2014/03/17/206197.html</link><dc:creator>CrHackOS</dc:creator><author>CrHackOS</author><pubDate>Mon, 17 Mar 2014 05:55:00 GMT</pubDate><guid>http://www.cppblog.com/crhackos/archive/2014/03/17/206197.html</guid><wfw:comment>http://www.cppblog.com/crhackos/comments/206197.html</wfw:comment><comments>http://www.cppblog.com/crhackos/archive/2014/03/17/206197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/crhackos/comments/commentRss/206197.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/crhackos/services/trackbacks/206197.html</trackback:ping><description><![CDATA[（1）选取三个素数：P、Q、E；<br />（2）计算 N = P * Q，F = (P - 1) * (Q - 1)；<br />（3）求方程 E * x - F * y = 1 最小整数解 D；<br />（4）(E，N) 为公钥，(D，N) 为私钥；<br />（5）加密过程为：C = (M ^ E) mod N（C 为密文，M 为明文）；<br />（6）解密过程为：M = (C ^ D) mod N（C、M 不能大于 N）；<br />（7）P、Q 必须是有一定长度的强素数，使得 N 因式分解很难；<br />（8）P、Q 之间最好相差很大，一般相差个几位；<br />（9）E 不可取得太小，一般取16位的素数，65537是一个常用数；<br />（10）Java 下 RSA 和大整数运算的数据存放方式都是大端格式。<img src ="http://www.cppblog.com/crhackos/aggbug/206197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/crhackos/" target="_blank">CrHackOS</a> 2014-03-17 13:55 <a href="http://www.cppblog.com/crhackos/archive/2014/03/17/206197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些我常用的工具软件</title><link>http://www.cppblog.com/crhackos/archive/2013/03/24/198790.html</link><dc:creator>CrHackOS</dc:creator><author>CrHackOS</author><pubDate>Sun, 24 Mar 2013 14:25:00 GMT</pubDate><guid>http://www.cppblog.com/crhackos/archive/2013/03/24/198790.html</guid><wfw:comment>http://www.cppblog.com/crhackos/comments/198790.html</wfw:comment><comments>http://www.cppblog.com/crhackos/archive/2013/03/24/198790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/crhackos/comments/commentRss/198790.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/crhackos/services/trackbacks/198790.html</trackback:ping><description><![CDATA[（1）EditPlus<br />　　这个是我写代码的主要工具，几乎所有的代码都是用它写出来的。功能虽然没有其他编辑器或 IDE 那样强大，但是配置容易，简单清爽，上手很快，并且功能也没有像记事本那么弱，走的是中庸路线。<br /><br />
<div>（2）TortoiseSVN<br />
<div>　　每个做开发的人都应该自己搞一套版本管理系统，我的内部项目全都是用它管理的（不用装服务端，直接可以用它来建仓库）。自从用上了 SVN，已经彻底无法离开了。真无法想象从前人肉管理源代码的日子是怎么过来的。最早 TortoiseSVN 不带命令行工具，需要另外装一套工具，后来从某个版本开始自带了，所以只要装这一个就可以了。<br /><br />（3）TortoiseGit<br />
<div>　　这个是最近才开始用的版本管理工具外壳，它的操作方式与 TortoiseSVN 的差不多，上手很快。使用它前必须先装 Git for Windows 。Git 比 SVN 爽多了，GitHub 也是个很爽的网站，最喜欢里面的源代码统计功能，加了几行，删了几行，源码类型百分比统计，ZIP 打包下载等等。另外，建议使用英文版（包括 TortoiseSVN），一些词条换成中文就搞不清楚到底是哪个命令了。<br /><br />（4）HaSHer<br />
<div>　　这个是我自己写的工具，可以批量计算文件的哈希值，并且比较前后两次哈希值列表的差异（需要外部文本比较工具 TextDiff 和 TortoiseMerge）。我都是挂在右键菜单上用的。<br /><br /></div>（5）grepWin<br />
<div>　　TortoiseSVN 作者做的一个文本查找替换的小工具，挂在右键菜单上可以很方便的查找替换源码（脱离编辑环境）。<br /><br /></div>（6）HashCalc<br />
<div>　　一个计算哈希的免费工具。我主要用它来计算源代码里的字符串哈希值，同时用来对比自己代码计算哈希值的正确性，做个参考。<br /><br /></div>（7）Rapid Environment Editor<br />
<div>　　一个非常好的环境变量配置工具，免费的。配置编译器路径和环境变量时很方便（Windows 自带的环境变量设置工具到了 Win7 还是那副德性，完全没有可用性，让人忍无可忍，难道是为了留口饭给别人吃？）。<br /><br /></div>（8）FreeFileSync<br />
<div>　　免费开源的文件同步工具，用来备份文件很方便。我都是用它来把文件备份到移动硬盘里去的，使用镜像模式。<br /><br />
<div>（9）010 Editor<br />
<div>　　分析二进制文件的时候使用。虽然有不爽的地方，但是功能还算够用。在没有更好的选择之前用用还算不错。以后 QuestLAB 里会做一个类似的二进制观察分析工具，可以自己定制一些自己想要的功能。<br /><br />（10）Foxit Reader<br />
<div>
<div>　　看 DataSheet PDF 用的，比起又大又臭的那什么要小巧清爽多了，不过听说其安全漏洞很多。中文版貌似版本很老，一直没有更新，现在直接使用英文版。<br /><br />（11）Greenfish Icon Editor<br />
<div>
<div>
<div>　　一个免费的图标编辑工具。QuestLAB 里的图标都是用它编辑的（网上找来中意的图标，然后删除图标文件里的那些超大图标，并按大小排成一致的顺序）。</div></div></div><br />
<div>
<div>（12）Sysinternal Suite<br />　　微软出的一组免费的实用工具。常用的有 AutoRuns（删注册表僵尸、自启动和垃圾驱动用）、Desktops（可实现多个桌面）、Junction（XP 下用来实现 NTFS 文件链接）、SigCheck（检查文件的数字签名，我是挂在右键菜单上用的）、Sync（刷磁盘写缓存用，强行断移动硬盘前执行几次）。<br /><br />（13）WinDV<br />
<div>　　一个德国人写的视频采集小程序。抓 DV 视频的时候文件名会以拍摄日期命名并分割文件，这个是会声会影做不到的。<br />
<div>
<div>
<div>&nbsp;</div></div></div></div></div></div></div></div></div></div></div></div></div></div><img src ="http://www.cppblog.com/crhackos/aggbug/198790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/crhackos/" target="_blank">CrHackOS</a> 2013-03-24 22:25 <a href="http://www.cppblog.com/crhackos/archive/2013/03/24/198790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QuestLAB 开发更新日志</title><link>http://www.cppblog.com/crhackos/archive/2012/09/02/189071.html</link><dc:creator>CrHackOS</dc:creator><author>CrHackOS</author><pubDate>Sat, 01 Sep 2012 16:00:00 GMT</pubDate><guid>http://www.cppblog.com/crhackos/archive/2012/09/02/189071.html</guid><wfw:comment>http://www.cppblog.com/crhackos/comments/189071.html</wfw:comment><comments>http://www.cppblog.com/crhackos/archive/2012/09/02/189071.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/crhackos/comments/commentRss/189071.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/crhackos/services/trackbacks/189071.html</trackback:ping><description><![CDATA[<div>【基本信息】<br />
将自己的想法付诸行动，那才是真正的有意思。<br />
<div>　项目地址：<a href="https://github.com/prefetchnta/questlab">https://github.com/prefetchnta/questlab</a></div>
<div>　程序下载：<a href="https://github.com/prefetchnta/questlab/tags">https://github.com/prefetchnta/questlab/tags</a></div>
<br />
【更新列表】<br />
<div>
==============================<br />
<div>　<span style="color: #ff0000;">Release 2020-08-23</span>、Release 2020-01-20</div>
==============================<br />
<div>　<span style="color: #00ffff;">Release 2019-02-16</span></div>
==============================<br />
<div>　<span style="color: #00ff00;">Release 2018-09-21</span>、<span style="color: #ffff00;">Release 2018-08-30</span>、<span style="color: #ff0000;">Release 2018-01-18</span></div>
==============================<br />
<div>　Release 2017-12-31、<span style="color: #ff00ff;"><strong>V1.0</strong></span>、<span style="color: #00ffff;">Release 2017-10-26</span>、<span style="color: #00ff00;">Release 2017-07-03</span>、<span style="color: #ffff00;">Release 2017-02-10</span></div>
==============================<br />
<div>　<span style="color: #ff0000;">Release 2016-11-02</span>、Release 2016-02-25</div>
==============================<br />
<div>　<span style="color: #00ffff;">Release 2015-07-14</span>、<span style="color: #00ff00;">Release 2015-03-23</span>、<span style="color: #ffff00;">Release 2015-01-28</span>、<span style="color: #ff0000;">Release 2015-01-13</span></div>
==============================<br />
<div>　Release 2014-11-18、<span style="color: #00ffff;">Release 2014-08-19</span>、<span style="color: #00ff00;">Release 2014-07-10</span>、<span style="color: #ffff00;">Release 2014-06-06</span>、<span style="color: #ff0000;">Release 2014-05-30</span>、Release 2014-05-14、<span style="color: #00ffff;">Release 2014-04-29</span>、<span style="color: #00ff00;">Release 2014-04-09</span>、<span style="color: #ffff00;">Release 2014-03-23</span>、<span style="color: #ff0000;">Release 2014-03-04</span>、Release 2014-02-26、<span style="color: #00ffff;">Release 2014-01-24</span>、<span style="color: #00ff00;">Release 2014-01-03</span></div>
==============================<br />
<div>　<span style="color: #ffff00;">Release 2013-12-31</span>、<span style="color: #ff0000;">Release 2013-12-03</span>、Release 2013-11-26、<span style="color: #00ffff;">Release 2013-11-05</span>、<span style="color: #00ff00;">Release 2013-10-14</span>、<span style="color: #ffff00;">Release 2013-09-29</span>、<span style="color: #ff0000;">Release 2013-09-10</span>、Release 2013-08-22、<span style="color: #00ffff;">Release 2013-08-09</span>、<span style="color: #00ff00;">Release 2013-07-09</span>、<span style="color: #ffff00;">Release 2013-07-08</span>、<span style="color: #ff0000;">Release 2013-06-01</span>、Release 2013-05-09、<span style="color: #00ffff">Release 2013-04-22</span>、<span style="color: #00ff00">Release 2013-04-12</span>、<span style="color: #ffff00">Release 2013-04-07</span>、<span style="color: #ff0000">Release 2013-03-29</span>、Release 2013-03-24、<span style="color: #00ffff">Release 2013-03-16</span>、<span style="color: #00ff00">Release 2013-03-07</span>、<span style="color: #ffff00;">Release 2013-02-26</span></div>
</div>
</div><img src ="http://www.cppblog.com/crhackos/aggbug/189071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/crhackos/" target="_blank">CrHackOS</a> 2012-09-02 00:00 <a href="http://www.cppblog.com/crhackos/archive/2012/09/02/189071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重新设计 GameViewer 一个新的开始</title><link>http://www.cppblog.com/crhackos/archive/2012/08/17/187493.html</link><dc:creator>CrHackOS</dc:creator><author>CrHackOS</author><pubDate>Fri, 17 Aug 2012 09:10:00 GMT</pubDate><guid>http://www.cppblog.com/crhackos/archive/2012/08/17/187493.html</guid><wfw:comment>http://www.cppblog.com/crhackos/comments/187493.html</wfw:comment><comments>http://www.cppblog.com/crhackos/archive/2012/08/17/187493.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/crhackos/comments/commentRss/187493.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/crhackos/services/trackbacks/187493.html</trackback:ping><description><![CDATA[　　以前刚开始搞 GameViewer 的时候，主要目的是做一个自娱自乐的东西，用来打发打发时间。后期发现，当中有很多东西与平时的工作、兴趣爱好等等有很多的关联。所以后来，才逐渐加入了一些诸如 3D 模型、图片滤镜、脚本之类的功能。希望一些东西能够集成到那里去，有个可以测试和试验的统一环境。同时，那里面的东西也能够拿出来实际使用，不光光只是用来提取别人的东西，别无他用。<br />　　之前用的是 C++Builder 6.0 做的界面，用 VC2003 写的一些库和插件。后来发现，这样的组合越来越偏离了本身的目标，局限性太大了，很多现成的资源无法利用，所以就果断停止了进一步的开发。而且，我想玩的东西还有很多，比如换用 QT 或者 WX 写写界面；用 OpenCV 做图形图像处理；加入 Lua、Python 等等来做脚本引擎；尝试一下那些开源的 3D 引擎；甚至想换用 .NET 和 Java 来做一点东西。一直以那样的组合为中心，实在是太无聊了，而且很难把所有不同的东西都拉到一起，或者说实现一个大统一的环境本来就是不可能的。<br />　　为了实现目标，这次打算用《UNIX编程艺术》一书里提到的思想方法来重新设计。其根本手段就是：（1）应用与库分开。这就实现了一些东西集成到里面去，并且可以拿出来实际使用。打个比方就是，写完一个游戏插件，就可以拿这个库直接使用别人的资源来开发自己的游戏（所以本次设计的主要目标不是提取游戏资源，而是直接渲染游戏数据）。（2）多进程的架构。这就实现了多框架、多开发环境的问题。由于都是独立的程序，我想用什么来开发就用什么来开发，自由的很。（3）一个程序只做好一件事。这才是模块化的最高境界，给你一种豁然开朗的感觉。一个程序写烂了，可以直接扔，不会影响大局。（4）进程间通讯交互。这个才是最最重要的部分，一定要仔细设计交互协议，否则就是天下大乱。<br />　　我把项目的源代码放到了这里 <a href="https://github.com/prefetchnta/questlab">https://github.com/prefetchnta/questlab</a>&nbsp;，除了用到的第三方闭源开发库外，其他都是开放源代码的。目前还没有完全重现 GameViewer 的所有功能，但是整体框架已经有点成型了。以后会不定期更新，把以前做过的那些东西逐步开源出来。还要把其他零散的小工具、小程序统一集成到这个环境里来，形成一个大统一的应用程序。 <img src ="http://www.cppblog.com/crhackos/aggbug/187493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/crhackos/" target="_blank">CrHackOS</a> 2012-08-17 17:10 <a href="http://www.cppblog.com/crhackos/archive/2012/08/17/187493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>超级大恶（贱）人学习手册</title><link>http://www.cppblog.com/crhackos/archive/2012/07/07/182028.html</link><dc:creator>CrHackOS</dc:creator><author>CrHackOS</author><pubDate>Sat, 07 Jul 2012 00:53:00 GMT</pubDate><guid>http://www.cppblog.com/crhackos/archive/2012/07/07/182028.html</guid><wfw:comment>http://www.cppblog.com/crhackos/comments/182028.html</wfw:comment><comments>http://www.cppblog.com/crhackos/archive/2012/07/07/182028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/crhackos/comments/commentRss/182028.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/crhackos/services/trackbacks/182028.html</trackback:ping><description><![CDATA[<div>（1）想要成为一个超级大恶（贱）人，首先要明确，做大恶（贱）人的目的是什么。那就是，打击自己认为、以为或者圈定的对手（哪怕只是自己一厢情愿），给对方带来最大痛苦，实现自己龌龊的想法，进而满足自己变态的心理欲望或者贪婪的物质欲望（心理是绝大多数）。<br /><br />（2）一定要从自己的亲人、亲戚、好友里寻找自己下手的目标。因为陌生人与你不熟，大多很快会把痛苦忘记掉。而自己的亲人、亲戚、好友会一直记在那里，从而把这种痛苦一直延续下去。而且，你自己也会产生一种所谓的族群里的心理优越感，把自己变态、龌龊的心理快感放大到最大。<br /><br />（3）不能有内疚的心理。如果你把一个人给害惨了，你自己感到有点内疚，那证明，你离超级大恶（贱）人还有一段距离要走。当然也不能有真正的同情心。但是虚假的同情和关心是很有必要的，那样就像是在对方的伤口上撒盐一样，让对方更痛苦，自己更愉悦。<br /><br />（4）要以老实、内向的人为下手目标。一来，比较好耍弄和陷害；二来，可以保证自己的安全。这一条也是第二条的补充：出于种种情面上的原因，你的亲人、亲戚、好友不会明的把你怎么样，最多也只是敬而远之。<br /><br />（5）要从背后捅刀子。最好还是从对方周边的亲人中来寻找捅刀子的机会。可以一边收集情报，一边隔山打羊。借他们的手捅人那可是最佳。一旦事情败露，关系可以推得一干二净。自己逍遥快活，让别人痛苦去吧。最佳的寻找人选是对方的上一辈老人，因为那一辈人比较纯朴，也比较无知，比较容易相信你那有着不可告人目的的谎话。<br /><br />（6）一旦真面目被戳穿、揭破，要马上披上道歉者、同情者、弥补者的外衣。当然，那些肯定都只是虚假的，没有实际行动的口头表示罢了。在那些外衣的保护和掩护下，你可以一次次地在对方的伤口上撒盐，而对方却拿你没有什么办法。<br /><br />（7）在对方的正面，要以最丑恶、最装逼的面目出现。比如，自己的收入比别人哪怕只高一元钱，也要说一个人的收入决定一个人的能力；又比如，自己比别人哪怕只早工作一个月，工作内容也只有一点点相关，也要做出一副老前辈、老资格的样子，对别人指指点点、谆谆教诲。因为你是超级大恶（贱）人，你的存在就是为了让你的目标恶心、反胃与痛苦。<br /><br />（8）强怕狠，狠怕没天良。在这片没有更无耻，只有更下贱的土地上，正迎来了一个超级大恶（贱）人辈出的伟大时代。往往越是无耻的人，活的越滋润。正所谓好人难做，而恶人却谋世界。等你丧尽天良，人性泯灭的时候，一个顶级的超级大恶（贱）人就这样诞生了。<br /><br />（9）郑重声明：人在做，天在看。告诫学习了此手册，并打算付诸于行动的同学，悬崖勒马，回头是岸。要知道，善恶终有报，不是不报，时辰未到。一旦有任何不良后果，与本手册的作者无关。<br /><br /></div><img src ="http://www.cppblog.com/crhackos/aggbug/182028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/crhackos/" target="_blank">CrHackOS</a> 2012-07-07 08:53 <a href="http://www.cppblog.com/crhackos/archive/2012/07/07/182028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于J-Link升级最新固件后无法连上的一点分析</title><link>http://www.cppblog.com/crhackos/archive/2012/05/20/175483.html</link><dc:creator>CrHackOS</dc:creator><author>CrHackOS</author><pubDate>Sun, 20 May 2012 10:32:00 GMT</pubDate><guid>http://www.cppblog.com/crhackos/archive/2012/05/20/175483.html</guid><wfw:comment>http://www.cppblog.com/crhackos/comments/175483.html</wfw:comment><comments>http://www.cppblog.com/crhackos/archive/2012/05/20/175483.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.cppblog.com/crhackos/comments/commentRss/175483.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/crhackos/services/trackbacks/175483.html</trackback:ping><description><![CDATA[　　昨天升级了最新的 Keil MDK 4.53，怕它老是提示 J-Link 要升级，就去 SEGGER 的网站下了个最新版的 J-Link 软件包（4.46F 版的），装好后运行 J-Link Commander 提示要升级固件。以前一直是刷的，没有问题，这次竟然升级后连不上仿真器了。提示 "Communication timed out: Requested&nbsp;1 bytes, received&nbsp;0 bytes !"。SEGGER 终于开始玩花招了。到 Keil 里打开了以前的一个工程，发现竟然还能调试，一看那 DLL 的版本是 4.40C 的，看来是在 DLL 里做了些手脚。<br />　　今天用 IDA 跟了一下 J-Link Commander，并对比了一下两个动态库的差别，发现新版的在打开 J-Link 函数的过程里多了两个调用。前一个判断了一下仿真器的功能字符串里是否有 GDBFull，有就会多一步 USB 通讯，超时的就是这一步操作；后一个通过序列号枪毙了一些老的（被偷的？）J-Link。看了一下 GDBFull 这个字符串，只在这里用了一次，将其全部改为大写，发现可以连上了。另外，序列号为 11111117 和 805306163 的会强制校验 GDBFull 功能。<br />　　大致上猜了一下，可能是 SEGGER 更新了一下 GDBFull 功能与序列号的绑定算法，下面的固件里也应该改过了，那一步 USB 通讯就是下面返回上来的认证结果，所以接收的只有一个字节。GDBFull 这个功能貌似从来没有用过，反正我没有用到过。<br />　　节约空间资源，删掉了下载。具体改法就是找到那个字符串，改成别的就行了。<br /><img src ="http://www.cppblog.com/crhackos/aggbug/175483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/crhackos/" target="_blank">CrHackOS</a> 2012-05-20 18:32 <a href="http://www.cppblog.com/crhackos/archive/2012/05/20/175483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>