- 博客(34)
- 收藏
- 关注
原创 普通C++程序员 VS 文艺C++程序员
原贴最初发表在QQ空间:普通C++程序员 VS 文艺C++程序员,http://user.qzone.qq.com/31731705/blog/1323153107 BBS上看到一个讲C++的帖子, C++ 这孩子 是不是误入歧途了?,让我想起了普通青年和文艺青年。 看这个经典的NB程序,求一个数有多少bit。J普通C++程序员nam
2011-12-12 14:19:50
2766
1
原创 C S D N,是你过时了吧?
原贴最初发在QQ空间:C S D N,是你过时了吧?(http://user.qzone.qq.com/31731705/blog/1322629066)上次碰到件和谐的事,优快云也来这招--和谐,http://user.qzone.qq.com/31731705/blog/1308063499,这次又碰上一个。回复一个朋友留言,等了半天也没反应,以为是Bug,重试了几次,依然如故
2011-12-01 10:31:53
3059
1
原创 Win7下的段和门 (2)
原贴最初发表在QQ空间:Win7下的段和门 (2),http://user.qzone.qq.com/31731705/blog/1322121566代码和相关的分析在这:Win7下的段和门 (2) (附录),http://user.qzone.qq.com/31731705/blog/1322535584 不久前写过一篇 Win7下的段和门(http://user.q
2011-11-29 11:11:15
3307
原创 一朝发祥地,两代帝王城
最初发在QQ空间, 参见:http://user.qzone.qq.com/31731705/blog/13189520499点左右的飞机,早早的起来,7点半不到就到了机场,登机口那空荡荡的,不见人,等飞机就是这样,掐着时间来吧,怕赶不上,提前到等的又痛苦。看着时间差不多了,一架飞机慢慢的靠近登机口,心想,总算可以上去了。不一会儿,竟然登机口里钻出不少人来?莫道君行早,更有早行人,这飞机是运了
2011-10-24 11:38:05
4158
原创 神奇的记事本
最初发表在我的QQ空间,见:http://user.qzone.qq.com/31731705/blog/1317393693记事本是Windows系统上的老程序了,它的历史几乎和Windows一样久,其实,平凡的它也是一个神奇的程序。在Win7上,将c:\windows\s
2011-10-08 11:27:02
5987
3
原创 SEH中的prolog和epilog
最初发布在QQ空间,见:SEH中的prolog和epilog,内有贴图。使用SEH的代码都需要构建栈桢,支持exception处理的栈桢,而重复的代码就应当提炼成函数,微软自然不会例外。为此系统提供了prolog和epilog系列,类似的函数有不少版本,但大同小异。这次不
2011-09-20 11:15:21
5518
原创 VEH中的陷阱
最初发在QQ空间,转到这:http://user.qzone.qq.com/31731705/blog/1314257137前面从理论(VEH中的陷阱(上))和实际(VEH中的陷阱(下))研究了VEH中存在的问题,那么,VEH的使用过程中有哪些注意事项?1. 防御性编程
2011-08-31 16:40:00
9502
原创 Windows 7下的段和门
最初发在QQ空间:Windows 7下的段和门 这段时间看了保护模式的一些文章(参见:最近感兴趣的一些技术文章的最后),零零碎碎一大堆概念,什么代码段,数据段,LDT,TSS,还有各种各样的门。,心血来潮写了个windbg的脚本,分析Windows系统的使用情况。
2011-08-22 10:20:38
2607
2
原创 浅谈SEH和UEF
以前写了篇文章 Windows平台下的异常处理 讨论了Window平台下的一些异常处理方式,然而,简单的把SEH和UEF并列,并不是十分合适,它们并不在一个层级上,UEF相当于SEH框架中的ExceptionFilter表达式,SEH和UEF都属于SEH框架,走同样的异常分发流程
2011-08-17 13:32:11
2255
原创 C++代码的维护,从一个实例说起
小问题有大智慧-代理服务器的监测 是几个月前的文章,最近碰到别人问如何设置代理的问题,又回顾了部分代码,虽然时间不长,还是有不少记不清了。,于是就整理了那个设置代理的函数,代码是实践的科学,每写一次,都会有点心得。先把代码贴出来,这个函数的大概流程是,先查询当前的浏览器设置,然后
2011-07-27 10:13:22
3992
原创 小议Windows平台下的异常处理
最初发表在QQ空间:Windows平台下的异常处理对windows平台几种异常处理的简单介绍,权当抛砖引玉了。1. UEF(UnhandledExceptionFilter): 通过SetUnhandledExceptionFilter,不需要在各个代码处分别处理,可以为整个应用
2011-07-26 10:32:27
2145
原创 标准C++与线程
标准C++和标准库中没有对线程的封装,程序员们不得不使用OS提供的API来处理线程,OS级别的API通常基于C,能用,但并不方便。最近看到论坛上有人问,顺便和同事讨论这个问题,如何使用标准C++封装线程的操作,目的就是simple and easy to use。想想自己似乎多年
2011-07-22 09:57:30
3368
原创 面试一道题--C模拟实现C++的多态
原贴最初发表在QQ空间: http://user.qzone.qq.com/31731705/blog/1310540087 上个月面试了一些快要毕业在找工作的学生,有个奇怪的感觉,学校就是学校,搞的东西大多是理论或者算法方面的,听的我是云里雾里,还有就是很NB很酷的那种,动不动
2011-07-19 10:22:06
2838
原创 新浪被攻击
一、事件的经过2011年6月28日晚,新浪微博突然出现大范围“中毒”,大量用户自动发送“建党大业中穿帮的地方”、“个税起征点有望提到4000”、“郭美美事件的一些未注意到的细节”、“3D肉团团高清普通话版种子”等带链接的微博与私信,并自动关注一位名为hellosamy的用户。事件
2011-07-08 09:39:32
3234
原创 函数调用之谜
最初发布在QQ空间: http://user.qzone.qq.com/31731705/blog/1305821803函数指针的值不是函数地址? 介绍了内部的函数是如何通过ILT调用的,这次说说那些使用DLL import 进来的函数又是怎样调用的?typedef HANDLE
2011-05-23 09:54:00
3545
原创 __report_gsfailure中UEF的特殊行为
<br />原本以为对UEF的逻辑已经大概了解了(理解UnhandledExceptionFilter),最近调试__report_gsfailure的时候却碰到了新问题。从VS2005以来,编译器添加了对栈的保护检查以防止buffer overrun的危害。一旦发现栈的内容出现错误,会调用__report_gsfailure,代码如下:<br />1. DebuggerWasPresent = IsDebuggerPresent(); <br />2. _CRT_DEBUGGER_HOOK(_CR
2011-05-05 14:30:00
8133
原创 迎接IE 9
最初发表在 QQ空间 迎接IE 9前段时间安装了IE 9,一周下来多了不少体会。相比于IE 8,IE9具有不少的亮点,1. UI更漂亮了,还是多tab的模型,tab排列在了address bar的右边,空间更大更简洁。微软的UI历来如此,每次都感觉不错,已经足够了,等到新版本出来
2011-04-25 10:53:00
2160
原创 函数指针的值不是函数地址?
最初发布在: http://user.qzone.qq.com/31731705/blog/1302859584在写跑在main之前的时候,碰到了很奇怪的问题。int initBreak(){DebugBreak();return 0;}typedef i
2011-04-19 10:53:00
4447
原创 跑在main之前
最初发表在QQ空间(这里贴图不方便),全文见 跑在main之前 和 跑在main之前 (2) ,有图有真相。通常这是一个面试题,如何让一段代码跑在main()函数前面。一个熟练的C++开发者能够轻易给出答案,即静态初始化。在C里面又如何呢,有没有办法做到这点?下面讲一个VC里的方
2011-04-18 10:13:00
2585
原创 小问题有大智慧-代理服务器的监测
<br />公司里的电脑都在一个域内,上网使用PAC自动化脚本,内部会自动解析所需要的代理,这些都是网络管理员自动设置,用今天流行语来说,你被设置了。有的时候这挺烦人的,特别是当你需要自己设定代理时,虽然当时你可以在浏览器的选项里这么做,不过一会儿,又会被域Policy自动更改回
2011-04-14 18:21:00
3526
原创 世界上最难的语言
<br />对你来说,最难的语言是什么?难道不是C++?<br />首先,C++兼容C,C语言本身就是一种复杂的语言。你可以不承认这一点,如果你能看懂下面的程序的话。<br /> <br />变态的hello word<br /> <br />再次,C++的特性复杂,并且很自由,自由到了恐怖甚至变态的地步。对于任何C++开发者来说,你需要时时提醒自己,它是一个难以训服的猛兽,随时会伤害到你。<br /><br />Linus说,"C++ is a horrible language. It’s made m
2011-04-14 18:15:00
1342
原创 深入浅出 First chance, second chance和ExceptionPort
<br />ExceptionPort的作用,是在用户态异常的第2轮分发过程中,如果第二轮还无人处理,那么就会发到ExceptionPort 。关于异常的分发,部分可以参考 理解UnhandledExceptionFilter <br />对于ExceptionPort,每个普通进程都会设置,CSRSS进程负责监听。CSRSS收到异常消息后一般是立刻终止进程,Win7开始,略有变化。<br />可以使用windbg做个实验,加深对上述概念的理解。来段简单的代码,<br />int main(int argc
2011-02-28 10:31:00
1663
原创 理解UnhandledExceptionFilter
最初发表在QQ空间,全文参见 理解UnhandledExceptionFilter UnhandledExceptionFilter,在一个windows平台上的C/C++程序中,主线程的SEH框架会有2层,最外层是BaseProcessStart,里面是mainCRTStart
2011-02-24 12:32:00
9430
原创 为什么对TerminateProcess断点不起作用
最初发表在QQ空间,全文见 为什么对TerminateProcess断点不起作用在内核态下巧设用户模块断点介绍了在内核态下设置用户模块的断点,结尾处留了一个问号,为了简化问题,这次直接在用户态下调试。使用windbg 打开一个notepad程序。设置断点。0:000> bl 0
2011-02-23 10:18:00
2666
原创 实战调试IE8
<br />一个浏览器兼容性bug所想到的 文中提到了IE8有些特殊的地方, 对于开发人员来说,最大的问题是无法调试。关于IE8的更多信息,参见IE 8 不得不说的七件事 <br /> <br />针对IE8这个例子,我们可以考虑使用Windows为应用程序提供的特殊调试能力,系统自动调试设置,配置如下: <br />1)在注册表 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Opti
2011-02-22 09:50:00
1442
原创 在内核态下巧设用户模块断点
<br />假如我们调试内核时,需要在kernel32中设断点。一般情况下,使用调试器中断到内核中时,当时进程和线程都是Idle,<br />kd> !process<br />PROCESS 8054a900 SessionId: none Cid: 0000 Peb: 00000000 ParentCid: 0000<br /> DirBase: 00039000 ObjectTable: e1000d68 HandleCount: 128.<br /> Image: Idl
2011-02-21 10:51:00
1777
原创 一个浏览器兼容性bug所想到的
<br />是以前做过的一个项目,一个浏览器IE的插件,过滤打开的网页并在网页里用图片显示一些信息。那时还是IE6的时代,没多久出了IE7。这个插件在这2个版本工作的很好。最近心血来潮,想在IE8上试试,没想到图片始终显示不出来。那份代码已经有几年没碰了,抱着试试看的态度,看看到底怎么了。<br /> <br />一开始就很不顺利,当时的开发是用的VS2005,现在的工具则是2010了,项目升级过来,编译没通过,原来是微软把ATL的部分代码开源了,需要单独下载安装,另外2010也修改了一些配置,比如"Use
2011-02-21 10:46:00
756
原创 JIT的初始断点
<br />上网好好的,忽然IE Crash了,windbg作为JIT被自动启动起来,下意识的输入!runaway, ~* kv查看,发现所有的线程都在ntdll!KiFastSystemCallRet,也就是在内核中,一时间很奇怪,那IE怎么crash的?带着这个问题,中饭都没吃好。<br /> <br />苦思了很久之后,一下子顿悟了。当时的断点应该是初始断点,也就是ntdll!DbgUiRemoteBreakin,而真正的罪魁祸首应该还需要再g一下,跳过这个无意义的初始断点,虽然当时的IE已经没了,幸
2011-02-16 14:52:00
916
原创 Breakpoint won't be hit
<br />微软的步伐很快,开发工具一二年就是一个版本,但使用最多最得心应手的还数VC6,感觉从那以后,VS的稳定性差了很多,不是突然卡住,就是表现的莫名其妙。今天一个问题就折腾了大半天,使用VS2010打开一个原来的VC6的项目,是使用MFC写的一个基于对话框的程序,微微修改了下,删除一个没有使用的变量声明,调试就出了状况。在设置断点的地方总是出现<br />"Breakpoint will not currently be hit. Source code is different from the o
2011-02-16 14:49:00
1310
原创 [JavaScript]OO的Timer
在JavaScript中使用timer很容易,function foo(){}setInterval( "foo()", 1000 );如果使用OO的技术,可以这样,// constructorfunction MyObj{ function foo() { alert( this.data ); } this.timer = foo; this.dat
2005-12-28 13:11:00
2767
1
原创 RTTI应用:let's cast
很早就了解到RTTI,但一直没有机会用到它,随便举个例子,在MFC的应用程序中,GetDlgItem()返回一个CWnd*,可是大家通常都直接cast,CEditCtrl *p = (CEditCtrl *)GetDlgItem(IDC_EDIT);大家对这种语法都习以为常,我亦是如此。因为想使用RTTI的时候却发觉并不是那么方便,心里总是不舒服。CEditCtrl *pEdit
2002-05-10 09:52:00
1612
原创 令人困惑的return by value
问题从这里开始。class X;const X operator+( const X& x1, const X& x2 );X foo(){return X(a+b);}和X foo(){X xx(a+b);return xx;}这两个函数,有什么区别?这个问题牵涉到C++的内部处理,下面是其更通用的模式。X foo(){X xx;// process...return xx;}C++如何处
2001-11-09 13:27:00
2309
原创 [深度探索C++对象模型](简体版)中的蛇足
>(简体版)中的蛇足(没有此书的人请勿看)上次见到这本书是一年前(是候先生的繁体版),花了一个星期的时间读完,囫囵吞枣,不求甚解,饶是如此,也解决了我在C++方面的诸多疑惑,这次终于看到了简体版,同样花了一个星期,或许真的是一回生,两回熟吧(也可能是对简体文字的亲切感^_^),思考问题的同时也发现了一些问题,一愚之见,不吐不快。蛇足之一,P84,class X {};cl
2001-10-10 13:24:00
3959
原创 静态初始化--我的理解
首先要明确的是,所有的初始化都是运行时完成的。0) int g;1) int global = rand();2) const int ci = 5;3) struct test4) {5) test() : i_(10) {}6) int i_;7) };8) test global_object;9) void fun()10) {11) int local;12) i
2001-09-30 23:20:00
5553
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人