<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

文章分类

导航

订阅

IA-32

Intel Architecture 32-Bit
润物细无声——Windows Intermals第5版印象
前两天拿到了Windows Internals的第5版,把玩了一番后,这两天仔细读了部分章节,与大家分享如下。 以作者在鸣谢一节的落款中的时间来看,上一节的时间是2004年9月,这一版的时间是2009年5月。二者相差不四年半有余。与很多写书计划和软件项目类似,这一版也是延迟了多次。但是好饭不怕晚,看了书之后,的确觉得改动和新增的内容不少。 单单从页数来看,第4版是935页,包括书后的索引,而第5版是1232页,多了297,差不多是一本普通技术书的长度。 从副标题来看,上一版的副标题叫Micorosoft 更多...

发布于 2009年7月19日 15:29Raymond10 篇评论

《软件调试》导读之操作系统篇
在今天的计算机架构中,操作系统是整个系统的统治者,它指挥着系统中的软硬件。如果拿人类社会来类比,那么操作系统好比是国家机器,应用软件是公民,操作系统的各个执行体是国家机构。从这个角度来看,操作系统与应用软件之间是统治与被统治的关系。 对于最终用户来说,他们需要的是应用软件,大多用户说不清什么是操作系统,只知道没有它不行。用户之所以肯掏出钱买操作系统是因为有了它才能跑自己需要的应用软件。从这个角度来说,应用软件是操作系统从用户那里拿到钱的资本,应用软件是前台唱戏的主角,操作系统是藏在后面的支持者。 更多...

发布于 2008年12月30日 14:05Raymond3 篇评论

在内核调试会话中设置用户态断点
使用内核调试会话也可以执行一些用户态调试任务,比如向位于用户态的模块设置断点。但这样做与使用用户态调试器有什么不同呢?我们就以向NTDLL.dll模块的ZwTerminateProcess函数(Stub)为例谈谈二者的区别。 区别一、在内核调试会话中设置这个断点的“难度”略大些。这是因为NTDLL不属于内核态的模块,所以内核会话通常不会加载这个模块(的符号),因此当执行bp命令时很可能被自动蜕化为bu命令。 0: kd> bp ntdll!ZwTerminateProcessBp expression 更多...

发布于 2008年11月18日 22:19Raymond7 篇评论

感受伟大
他1979年加入英特尔,是286和386设计团队的关键成员,80486的最初架构师。 1986-1989年他担任80486团队的设计经理。1989-1992年,担任负责设计Pentium Pro的部门(division)的总经理。 目前他是英特尔公司的高级副总裁(VP),DEG(Digital Enterprise Group)Group的总经理。 他便是帕特·基辛格(Pat Gelsinger)。很多人可能听说过Programming the 80386这本书。他的两位作者之一便是帕特。 更多...

发布于 2008年11月14日 21:37Raymond4 篇评论

海森伯效应一例
我们把调试过程对被调试程序所产生的影响称为海森伯效应(详见《软件调试》28.6.1)。设计调试工具时,当然应该努力降低可能的海森伯效应,以便可以在调试器中调试时看到的症状与没有被调试时是一样的。 但正像这个名字的由来(海森伯的测不准原理)那样,海森伯效应一定是存在的。只不过是很小,大多数时候都不会对我们的调试造成明显的影响。 前两天,jlflyfox提出了一个问题,这个问题其实是一种非常典型的海森伯效应。 为了讨论简单,可以使用下面的代码来重现jlflyfox所提出的问题。 /*-------------------------------------------------------------- 更多...

发布于 2008年10月31日 22:13Raymond5 篇评论

调试笔记之GMail挂死
在GMail进入Inbox前,挂死在Loading页面,数分钟后仍纹丝不动。唤WinDBG附身,远程中断方法不能工作: Break-in sent, waiting 30 seconds...WARNING: Break-in timed out, suspending. 挂起方法可以开始非入侵式调试会话:(1374.1134): Wake debugger - code 80000007 (first chance)eax=00a22d68 ebx=00000000 ecx=0000002a 更多...

发布于 2008年10月19日 9:57Raymond1 篇评论

《软件调试》导读之CPU篇
《软件调试》的第2篇是CPU的调试支持,由第2~7章组成,共有136页,是全书的第一个核心部分。写作和阅读这一篇的主要目标有如下几个: 介绍大多数软件工程师需要补充的CPU基础。 CPU对软件调试核心功能的支持。 CPU对软件调试扩展功能的支持。 CPU中用于调试系统故障和自身问题的设施。 现代CPU和集成芯片所使用的硬件调试方案。 针对以上目标,第2、3章是满足目标1的,4~7章依次是满足另外四个目标的。下面对各部分的重点内容分别略作介绍。 一、介绍一个调试高手应该掌握的CPU层的基础知识。第2章和第3章是专门服务于这一目的的。调试好比行医看病,病人是计算机系统,要能看懂这个系统的毛病然后再对其施以治疗或者手术,那么必须了解其五丈六腑的结构,血脉流通的路线,生息运转的机理。要做到这一点,深刻理解计算机系统中硬件部分的核心——CPU——很重要。有人说,CPU是重要,但有什么必要在一本《软件调试》的书中写这个呢?调试高手还需要数学基础和语文基础呢,怎么不开两章讲讲呢?这一拮问不是没有道理,因此作者考虑到这一点,慎重选择了要讲的内容,并严格控制了篇幅。入选的内容要符合三个条件:一是够重要,二是够常用,三是与调试密切相关。于是,《软件调试》最后选择如下一些内容: 更多...

发布于 2008年9月21日 20:32Raymond1 篇评论

调试笔记之Check Build
这两天使用Virtual PC(2004)安装了Windows XP SP3的Check版本。有些要点值得分享和备忘。 1 安装过程中的蓝屏 在安装程序复制好文件,重新启动时,会出现蓝屏,蓝屏代码是未处理的内核态异常,异常代码是80000003,即断点异常。看到这个蓝屏后,我想到是Check版本中的某些ASSERT所导致的,保留了更多的断言是Check版本的最大特色。对于断言,如果有调试器,那么系统就会中断到调试器,然后继续也可以了。 但是此时还不能进入系统启用调试选项,怎么办呢?于是想到了按F5在高级启动选项中选择调试选项。关于这个默认调试选项采用的连接参数,一种说法是COM1,一种说法是可以枚举到的最大编号COM口。实验下来,是第二种。也就是当调试器中使用COM2时,成功与虚拟机中的KD建立了连接。这验证了《软件调试》所采信的说法(18.3.3,P478)对于XP 更多...

发布于 2008年9月11日 21:18Raymond1 篇评论

《软件调试》导读之绪论篇
《软件调试》的第1篇名为“绪论”,只包含一章,共26页,是全书最短的一篇。 第一篇要实现的几个目标是: 1)介绍基本概念和术语,为后面各篇打基础和做铺垫。比如,1.1.1节给出了Bug和Debug的定义,1.6节详细的讨论了BUG,1.4节介绍了常见的软件调试型态。 2)浏览本书要介绍的主要调试技术,比如,1.5节分10个专题(三级小节)浏览了本后后面要深入讨论重要调试技术。 3)突显软件调试技术的关键特征和重要性,1.2节(基本特征)和1.7节(与软件工程的关系)都是服务于这个目的的。 更多...

发布于 2008年8月24日 17:12Raymond2 篇评论

内核调试的EXDI方式
除了串行口、1394和USB 2.0这些链接方式外,WinDBG还支持一种很特殊的连接方式来做内核调试。这种方式被称为EXDI,通常写为eXDI。简单来说,EXDI是WinDBG与硬件调试器协同工作的一个接口。 《软件调试》的第7章介绍了JTAG调试协议和Intel CPU的JTAG支持,即ITP/XDP接口。ITP调试器借助专用的硬件设备(ITP调试仪)通过CPU的专用信号引脚与CPU通信,实施调试任务。 ITP/XDP调试器都有自己的软件,可以观察内存、设置断点、接收CPU的事件等。但如果使用ITP调试器调试Windows操作系统或者其中的驱动程序时,一个明显的问题便是难以处理调试符号和支持操作系统相关的观察功能,比如WinDBG的那么多个扩展命令所提供的功能。于是,一种很自然的想法便是把ITP调试器当作一种读写数据的特殊连接方式,让其为WinDBG传递数据。 更多...

发布于 2008年8月6日 21:30Raymond1 篇评论

汇编与反汇编之小技巧
大家都知道,对于位于当前调试目标中的指令,可以使用WinDBG的u命令进行反汇编。u命令的参数是要反汇编代码的地址值或者符号,如果不指定,那么WinDBG会使用当前程序指针寄存器所指向的代码,例如: 0:001> untdll!DbgBreakPoint:7c901230 cc              int     37c901231 更多...

发布于 2008年7月3日 22:34Raymond2 篇评论

使用WinDBG观察启用PAE后的分页机制
我在《软件调试》一书的2.7节介绍了CPU的分页机制,因为这属于这本书的支持性内容,考虑篇幅限制,没有介绍启用PAE的情况。书出版后,很多读者对这一内容很感兴趣,也有读者遇到了启用PAE的情况。因此决定写这篇短文来介绍一下PAE的概况,以及如何在启用PAE后的系统中做2.7.5节的试验。 PAE是Physical Address Extension的缩写,即物理地址扩展。简单来说,就是把IA-32处理器的寻址能力从原来的4GB扩展到64GB。寻址4GB空间,要求物理地址的宽度为32位。类似的,要寻址64GB空间,那么物理地址的宽度就是36位。因为这个原因,PAE又被称为PAE-36bit。 更多...

发布于 2008年6月26日 18:47Raymond2 篇评论

手捧汗水的感觉
今天收到了编辑部快递给我的《软件调试》! 下班一进门,就看到了邮包,迫不及待的打开外面的包装后,里面是印有博文标记的纸袋,包裹的严严实实。因为《软件调试》的体型比较大,所以将其从纸袋中取出来还是费了点劲,也许是因为我有些激动。:-) 小女儿跑过来,要拿过来看一看,抱在怀里没走几步就喊重,显然这本书对她来说是有些重(后来称了下,1800克:-))。我把书接在手中,看着好亲切。仔细看了封面和封底后,大致翻阅了一下序言和正文,字体、行距、代码和插图看着都很舒服。特别是我担心的几幅插图,印刷出来后也很清晰。接下来,我想对它做一个“压力测试”。把书翻到差不多中间一页,向两侧用力掰了掰,然后再合上,看看书脊,没留下任何印记。看来装订的很牢固(不比担心像有些书那样一本被翻成几本)。而且翻开到中间页时,两边两页的文字都清楚可见。这样检查一番后,心中悬了许久的石头落地了。或者说持续了三年多的一次马拉松长跑终于到终点了。 更多...

发布于 2008年6月3日 23:22Raymond2 篇评论

SEH无法捕捉内核代码的除零异常
在下面这小段代码中,存在一个故意的除零操作,并且使用了Windows操作系统的结构化异常处理(SEH)机制对其进行了保护。     59: n=1;     60: m=0;     61: __try     62: {     63:         n=n/m; 更多...

发布于 2007年12月14日 23:11Raymond0 篇评论

关于早期PDC的简单介绍
不知道这是不是第一届PDC大会,但可以看到很多重量级的人物在其中演讲。再也不会有这样的PDC了! Microsoft Win32 Professional Developers Conference VideotapesMicrosoft University is pleased to announce the availability of a set of 22 videotapes of key sessions from the Win32 Professional Developers 更多...

发布于 2006年10月15日 14:34Raymond0 篇评论

刷CPU
大家一定听说过刷系统BIOS、刷网卡(上面的firmware)、刷显卡。其实CPU也是支持并可以刷新升级的。 随着CPU复杂度的不断提高,以及一些复杂指令(如多媒体和浮点运算)的引入,测试CPU的复杂度也在成倍提高。再加上集成芯片的生产特征使得可以通过软件刷新产品化的CPU成为必要。 刷新的具体过程和刷其它firmware很相似,通常是由BIOS程序在POST的早期阶段通过CPUID指令把新的数据(2048字节)更新到CPU内部的可擦写ROM上。 不过也有工具可以在操作系统启动后来更新(http://www.urbanmyth.org/microcode/) 更多...

发布于 2006年5月12日 22:22Raymond3 篇评论

Captive, 另一种虚拟技术
听说过Captive么?简单说它是Linux下完全读写NTFS文件系统的一个免费方案。因为其它Linux下的免费NTFS驱动大多在写NTFS文件系统时会有问题。所以这个Captive号称彻底解决了这一问题,因此受到很多人的特别青睐。之所以能彻底解决问题呢?原因是使用微软的NTFS驱动来访问NTFS文件系统,可谓原汤化原食! 那么如何让NTFS驱动在LINUX下跑起来呢?很多人自然想到虚拟机技术。但是细想仍然有问题,如果使用虚拟机,那么虚拟机里的NTFS驱动如何与作为HOST OS的LINUX进行文件操作这样的密集型通信呢,岂不是很慢? 更多...

发布于 2006年3月2日 13:36admin0 篇评论

Tom Shanley印象
Tom Shanley这个名字对国内的很多人来说可能还有些陌生,但是对他写的书也许很熟悉。 随意GOOGLE一下,就得到下面一个列表。 1.  Unabridged Pentium 4, The: IA32 Processor GenealogyBy Tom Shanley2.  PCI Express System ArchitectureBy Ravi Budruk, Don Anderson, Tom Shanley 3.  InfiniBand 更多...

发布于 2005年12月3日 22:12dbg1 篇评论

Powered by Community Server Powered by CnForums.Net