
C/C++
文章平均质量分 88
singlerace
这个作者很懒,什么都没留下…
展开
-
我的那些快捷键儿
VC 用的太熟的一个后果是看到有人用UltraEdit写VC程序时觉得不可理解。另一个后遗症是,我很喜欢用快捷键,熟悉了VC的这套快捷键后,用其他软件 的时候,如果快捷键设置和VC的习惯设置冲突就觉得很难受。比如说SoftIce,很久以前就开始用,至今还没习惯。下面说说我在使用VC IDE时经常用到的一些快捷键。CTRL+TAB:在IDE打开的文件间切换。我喜欢在IDE里同时打开很多文原创 2006-11-01 13:09:00 · 2560 阅读 · 5 评论 -
Windows CE系统级日志设计
我的经验,可靠的产品不是设计出来的,而是通过持续的解决BUG逐步达到的,当然我不是说设计不重要,我是想强调在产品中提供一些能够帮助诊断问题的设施是非常有必要的。在这方面,最常见的手段显然就是系统日志了。嵌入式系统由定制的硬件平台、定制的驱动程序、定制的系统组件,以及定制的应用程序构成。这么多定制的组件凑在一起,要在一个比较短的时间内把他们凑在一起,配合良好顺利运行不容易。他们中的任何部分都原创 2008-10-09 13:29:00 · 4131 阅读 · 4 评论 -
一种有趣的错误跟踪LOG
我正式用C++做产品开发到现在大约有7、8年,从学C++算起的话有10年,经验应该算是比较丰富的。但是我很少写C++方面的技术文章,C++诞生到现在二十几年,经典书籍、技术文章数不胜数,能写的好像都被人写完了,找点值得一些的东西实在不容易。在前一家公司的时候,我负责做基础框架,用COM+实现业务逻辑层。COM+这种东西不像standalone的application,调试和错误定位 都很麻烦,而且原创 2007-01-12 18:25:00 · 3930 阅读 · 7 评论 -
嵌入式系统开发经验谈:Windows CE开发都做些什么
我在博客的个人简介里说过我目前在从事基于Windows CE的BSP开发,这方面的文章到现在连一篇都没写过,似乎有些说不过去。老板肯定在犯嘀咕了,这小子不干正事儿,整天玩什么外啊挂啊的。接下来,我得整 两篇。以前我都想把文章写的跟论文似的,枯吧干燥,累人累己,以后我就胡乱侃了,一家之言,对不对的凑合着看吧。 Windows CE的文章前面写过几篇,看的人不多,可能是因为搞嵌入式系统相比桌面软件和W原创 2007-01-09 16:52:00 · 7275 阅读 · 4 评论 -
Hacking Diablo II之完整性检查(Integrity Scan)
d2hackmap有一个完整性检查的功能(Integrity Scan),用来检查游戏进程的代码有没有被改过。这个功能在d2hackmap的“安全开地图”中有所应用。所谓的“安全开地图”,其原理大致是在游戏进程分配一块空间,把“开地图”的相关代码(不是一个完整的DLL模块)注入这块空间,这段代码会在游戏的主线程context下运行,调用游戏的内部函数实现“开地图”逻辑,完事儿后再释放分配的空间。原创 2006-12-11 22:29:00 · 8173 阅读 · 1 评论 -
Anti-Warden技术之外挂的自我卸载
外挂Anti-warden的方法之一是给warden mod做数字签名,在检测到不安全或者未知的warden mod时,停止工作。对于以注入到游戏进程的方式运行的外挂来说,应该在warden开始执行检测之前自动卸载。这一篇介绍外挂自动卸载技术,也就是说如何在检测到不安全的.mod时把自己卸载掉。可能有人会想,这有什么难的,不就是调用FreeLibrary(假设加载用LoadLibrary)吗。调用原创 2006-11-28 23:00:00 · 6829 阅读 · 0 评论 -
如何让ActiveSync直接支持Ethernet连接
用过ActiveSync 连接Windows CE设备和PC的同学都知道,相对于Serial、USB等连接方式,Ethernet连接是个后娘养的孩子-微软出于某种考虑,让Ethernet连接方式在能够使用之前必须先用Seiral或者USB在设备和主机之间建立partnership。我个人一直觉得这不是一个合理的设计。比如就我们的设备而言,虽然正式的产品不支持ActiveSync,但是由于有些第三方原创 2006-11-24 17:35:00 · 4238 阅读 · 0 评论 -
Process Explorer for WinCE:揭示Windows CE系统运行时状态的强力工具
这篇要介绍的是我自己写的一个用于监控Windows CE运行时系统状态的工具-Windows CE Remote Process Explorer。2004年我开始从事Windows CE平台的开发,之前我对Windows CE几乎一无所知,为了了解Windows CE的系统机制,我利用业余时间写了这个工具。到目前为止,它已经具有了相当多的功能,也帮我解决了很多工作上的问题。简介如果你想监原创 2006-11-22 18:02:00 · 17275 阅读 · 38 评论 -
如何制作支持VMWare的Windows CE BSP
不知道有没有人试过在VMWare中跑过Windows CE。可能有人会问:在VMWare中跑Windows CE有什么意义?Windows CE不是有基于Vritual PC的emulator吗?要做干吗不做一个基于Microsoft自己的Virtual PC的?简单的答案是,VMWare支持一些Virtual PC(包括Windows CE emulator)不支持的硬件。对我来说,最吸原创 2006-11-19 22:01:00 · 13911 阅读 · 9 评论 -
C++临时变量的另类应用:基于iostream的类型安全的log接口设计
几年前做的一个东西,现在专注于系统底层开发,C++的高级功能用的比较少了,写出来回忆回忆。在实际的应用开发中,log模块设计是必不可少的一部分,log模块设计的好坏直接影响到系统的性能和日后的维护。总的来说,log模块在功能上除了日志级别、时间和消息正文这些必须的信息外,最好还能记录日志产生时尽可能多的信息,比如线程ID、模块名称、源文件、代码行等。在log接口的设计上应该尽可能简化,以方便调用。原创 2006-11-15 23:27:00 · 3122 阅读 · 3 评论 -
Hacking Windows CE: 如何从线程ID获取线程名称
在一个线程出现异常行为时,比如说CPU占用率过高,抛出异常等,你一定想知道这个线程是由哪个模块创建的。因此无论在哪个操作系统上,获取线程名称是诊断线程相关问题的重要一步。从线程ID获取线程名称通常的方法是,先获取该线程的入口地址,然后枚举进程内所有已加载模块,最后判断线程入口地址落在哪个加载模块范围内。枚举进程内已加载模块可用Win32标准的CreateToolhelp32Snapshot/原创 2006-11-11 21:26:00 · 6471 阅读 · 3 评论 -
[旧文存档]Introduction to Remote Run Library
也是2001年在vchelp发表的一篇相关文章。原文在这里。代码可以在vchelp下,不过比较旧。也可以直接向我要。做做这个library的原因是当时正热衷于玩代码远程注入。远程注入的代码编写的时候有很多限制,比如说必须关掉/GZ编译选项,不能使用全局/静态变量,远程运行的代码由于没有调试符号只能做汇编级调试,等等。因此做了这么一个可以把整个EXE模块远程注入到其他进程的东西。再次提醒,不要再原创 2006-11-10 00:30:00 · 6539 阅读 · 3 评论 -
推荐一篇介绍Visual C++对象模型的老文
看到一位朋友在博客里谈到C++的多重继承问题: 透过汇编另眼看世界之多继承下的虚函数函数调用。我也想说两句。从汇编的角度研究C++的实现真的是学习C++的一个很好的方法。要了解C++的对象模型,特别是多重继承下的对象模型,当然要看Stanley Lippman的“深度探索C++对象模型”。另外还有MSDN上的一篇文章,可能很多人都没注意到,讲的也很清楚。这里我向大家强烈推荐,虽然这是一篇发表在19原创 2006-11-10 20:28:00 · 1995 阅读 · 0 评论 -
旧文重贴,悼念我的第一个电子邮箱:在同一个进程空间运行两个程序
前天偶然点开了我的网摘(以前一直不知道优快云这个网摘是怎么回事),竟然发现里面保存了我在2001年写的这篇文章。于是翻了一遍,不想看到了后面留的email地址,勾起了我的伤感回忆。 fenny@163.net,这是我在互联网上申请的第一个email地址,那还是在1996年的时候,在学校的开放实验室里。记得Forest还拿这个名字打趣过我,说你怎么起了这么个名字,好歹也得叫个dollar什么的呀(原创 2006-11-10 00:18:00 · 13743 阅读 · 5 评论 -
SpiderMonkey-让你的C++程序支持JavaScript脚本
译序有些网友对为什么D2JSP能运行JavaScript脚本程序感到奇怪,因此我翻译了这篇文章,原文在这里。这篇教程手把手教你如何利用SpiderMonkey创建一个能执行JavaScript脚本的C++程序,并让JavaScript脚本操纵你的C++程序的内部数据、操作。从这篇教程可以看到在SpiderMonkey引擎的帮助下,让C++程序支持JavaScript脚本是一件很容易的事,更棒的翻译 2006-11-06 21:18:00 · 25131 阅读 · 4 评论 -
Hacking Diablo II之外挂实战教程:去除D2JSP试用版显示的Trial Version信息
前几天一个网友给我发消息请我帮他个忙。他的问题是,他正在使用的D2JSP是免费试用版,试用版在运行时会在游戏的所有游戏画面中央显示一行很大的“Trial Version”字样(见下图中的红圈),很烦人,他想去掉这行字。我想正好用此做个教程解释前面介绍过的hack工作原理,于是答应帮他看看。 我已经很久没有开BOT了,最后一次使用D2JSP还是2003年1.09d时期的事。根据我以前的理解原创 2006-11-05 12:00:00 · 10959 阅读 · 11 评论 -
Interlocked API的原子性如何保证
前面的文章提到如何利用Interlocked API设计系统级日志。Interlocked API可以对在多线程之间共享的内存变量提供原子性访问。有些CPU在硬件层面上直接支持这些操作,如80386以后的X86架构CPU,xchg、xadd、cmpxchg等指令在进行内存访问时锁住总线。举例来说, InterlockedExchangeAdd在X86上的实现如下:LONG WINAPI Inte原创 2008-10-09 16:38:00 · 3585 阅读 · 1 评论