开发与调试
文章平均质量分 72
招RD和QA
详情参见 http://user.qzone.qq.com/31731705/blog/1309748862
展开
-
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 · 1285 阅读 · 0 评论 -
面试一道题--C模拟实现C++的多态
原贴最初发表在QQ空间: http://user.qzone.qq.com/31731705/blog/1310540087 上个月面试了一些快要毕业在找工作的学生,有个奇怪的感觉,学校就是学校,搞的东西大多是理论或者算法方面的,听的我是云里雾里,还有就是很NB很酷的那种,动不动原创 2011-07-19 10:22:06 · 2809 阅读 · 2 评论 -
为什么对TerminateProcess断点不起作用
最初发表在QQ空间,全文见 为什么对TerminateProcess断点不起作用在内核态下巧设用户模块断点介绍了在内核态下设置用户模块的断点,结尾处留了一个问号,为了简化问题,这次直接在用户态下调试。使用windbg 打开一个notepad程序。设置断点。0:000> bl 0原创 2011-02-23 10:18:00 · 2629 阅读 · 0 评论 -
函数调用之谜
最初发布在QQ空间: http://user.qzone.qq.com/31731705/blog/1305821803函数指针的值不是函数地址? 介绍了内部的函数是如何通过ILT调用的,这次说说那些使用DLL import 进来的函数又是怎样调用的?typedef HANDLE原创 2011-05-23 09:54:00 · 3517 阅读 · 1 评论 -
新浪被攻击
一、事件的经过2011年6月28日晚,新浪微博突然出现大范围“中毒”,大量用户自动发送“建党大业中穿帮的地方”、“个税起征点有望提到4000”、“郭美美事件的一些未注意到的细节”、“3D肉团团高清普通话版种子”等带链接的微博与私信,并自动关注一位名为hellosamy的用户。事件原创 2011-07-08 09:39:32 · 3203 阅读 · 0 评论 -
函数指针的值不是函数地址?
最初发布在: http://user.qzone.qq.com/31731705/blog/1302859584在写跑在main之前的时候,碰到了很奇怪的问题。int initBreak(){DebugBreak();return 0;}typedef i原创 2011-04-19 10:53:00 · 4417 阅读 · 2 评论 -
浅谈SEH和UEF
以前写了篇文章 Windows平台下的异常处理 讨论了Window平台下的一些异常处理方式,然而,简单的把SEH和UEF并列,并不是十分合适,它们并不在一个层级上,UEF相当于SEH框架中的ExceptionFilter表达式,SEH和UEF都属于SEH框架,走同样的异常分发流程原创 2011-08-17 13:32:11 · 2214 阅读 · 0 评论 -
Windows 7下的段和门
最初发在QQ空间:Windows 7下的段和门 这段时间看了保护模式的一些文章(参见:最近感兴趣的一些技术文章的最后),零零碎碎一大堆概念,什么代码段,数据段,LDT,TSS,还有各种各样的门。,心血来潮写了个windbg的脚本,分析Windows系统的使用情况。原创 2011-08-22 10:20:38 · 2590 阅读 · 2 评论 -
SEH中的prolog和epilog
最初发布在QQ空间,见:SEH中的prolog和epilog,内有贴图。使用SEH的代码都需要构建栈桢,支持exception处理的栈桢,而重复的代码就应当提炼成函数,微软自然不会例外。为此系统提供了prolog和epilog系列,类似的函数有不少版本,但大同小异。这次不原创 2011-09-20 11:15:21 · 5458 阅读 · 0 评论 -
VEH中的陷阱
最初发在QQ空间,转到这:http://user.qzone.qq.com/31731705/blog/1314257137前面从理论(VEH中的陷阱(上))和实际(VEH中的陷阱(下))研究了VEH中存在的问题,那么,VEH的使用过程中有哪些注意事项?1. 防御性编程原创 2011-08-31 16:40:00 · 9434 阅读 · 0 评论 -
神奇的记事本
最初发表在我的QQ空间,见:http://user.qzone.qq.com/31731705/blog/1317393693记事本是Windows系统上的老程序了,它的历史几乎和Windows一样久,其实,平凡的它也是一个神奇的程序。在Win7上,将c:\windows\s原创 2011-10-08 11:27:02 · 5920 阅读 · 6 评论 -
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 · 3289 阅读 · 0 评论 -
C++代码的维护,从一个实例说起
小问题有大智慧-代理服务器的监测 是几个月前的文章,最近碰到别人问如何设置代理的问题,又回顾了部分代码,虽然时间不长,还是有不少记不清了。,于是就整理了那个设置代理的函数,代码是实践的科学,每写一次,都会有点心得。先把代码贴出来,这个函数的大概流程是,先查询当前的浏览器设置,然后原创 2011-07-27 10:13:22 · 3956 阅读 · 0 评论 -
小议Windows平台下的异常处理
最初发表在QQ空间:Windows平台下的异常处理对windows平台几种异常处理的简单介绍,权当抛砖引玉了。1. UEF(UnhandledExceptionFilter): 通过SetUnhandledExceptionFilter,不需要在各个代码处分别处理,可以为整个应用原创 2011-07-26 10:32:27 · 2127 阅读 · 0 评论 -
JIT的初始断点
<br />上网好好的,忽然IE Crash了,windbg作为JIT被自动启动起来,下意识的输入!runaway, ~* kv查看,发现所有的线程都在ntdll!KiFastSystemCallRet,也就是在内核中,一时间很奇怪,那IE怎么crash的?带着这个问题,中饭都没吃好。<br /> <br />苦思了很久之后,一下子顿悟了。当时的断点应该是初始断点,也就是ntdll!DbgUiRemoteBreakin,而真正的罪魁祸首应该还需要再g一下,跳过这个无意义的初始断点,虽然当时的IE已经没了,幸原创 2011-02-16 14:52:00 · 889 阅读 · 0 评论 -
一个浏览器兼容性bug所想到的
<br />是以前做过的一个项目,一个浏览器IE的插件,过滤打开的网页并在网页里用图片显示一些信息。那时还是IE6的时代,没多久出了IE7。这个插件在这2个版本工作的很好。最近心血来潮,想在IE8上试试,没想到图片始终显示不出来。那份代码已经有几年没碰了,抱着试试看的态度,看看到底怎么了。<br /> <br />一开始就很不顺利,当时的开发是用的VS2005,现在的工具则是2010了,项目升级过来,编译没通过,原来是微软把ATL的部分代码开源了,需要单独下载安装,另外2010也修改了一些配置,比如"Use原创 2011-02-21 10:46:00 · 739 阅读 · 0 评论 -
在内核态下巧设用户模块断点
<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 · 1755 阅读 · 0 评论 -
实战调试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 · 1431 阅读 · 0 评论 -
世界上最难的语言
<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 · 1296 阅读 · 0 评论 -
__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 · 8003 阅读 · 0 评论 -
标准C++与线程
标准C++和标准库中没有对线程的封装,程序员们不得不使用OS提供的API来处理线程,OS级别的API通常基于C,能用,但并不方便。最近看到论坛上有人问,顺便和同事讨论这个问题,如何使用标准C++封装线程的操作,目的就是simple and easy to use。想想自己似乎多年原创 2011-07-22 09:57:30 · 3319 阅读 · 0 评论 -
迎接IE 9
最初发表在 QQ空间 迎接IE 9前段时间安装了IE 9,一周下来多了不少体会。相比于IE 8,IE9具有不少的亮点,1. UI更漂亮了,还是多tab的模型,tab排列在了address bar的右边,空间更大更简洁。微软的UI历来如此,每次都感觉不错,已经足够了,等到新版本出来原创 2011-04-25 10:53:00 · 2148 阅读 · 0 评论 -
跑在main之前
最初发表在QQ空间(这里贴图不方便),全文见 跑在main之前 和 跑在main之前 (2) ,有图有真相。通常这是一个面试题,如何让一段代码跑在main()函数前面。一个熟练的C++开发者能够轻易给出答案,即静态初始化。在C里面又如何呢,有没有办法做到这点?下面讲一个VC里的方原创 2011-04-18 10:13:00 · 2563 阅读 · 0 评论 -
小问题有大智慧-代理服务器的监测
<br />公司里的电脑都在一个域内,上网使用PAC自动化脚本,内部会自动解析所需要的代理,这些都是网络管理员自动设置,用今天流行语来说,你被设置了。有的时候这挺烦人的,特别是当你需要自己设定代理时,虽然当时你可以在浏览器的选项里这么做,不过一会儿,又会被域Policy自动更改回原创 2011-04-14 18:21:00 · 3498 阅读 · 0 评论 -
理解UnhandledExceptionFilter
最初发表在QQ空间,全文参见 理解UnhandledExceptionFilter UnhandledExceptionFilter,在一个windows平台上的C/C++程序中,主线程的SEH框架会有2层,最外层是BaseProcessStart,里面是mainCRTStart原创 2011-02-24 12:32:00 · 9363 阅读 · 1 评论 -
普通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 · 2752 阅读 · 4 评论