ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
沪ICP备05041459号
About AdvDbg Consult Train Services Products Tools Community Contact   登录 | 注册

Debugging Principles

Debugging Principles
深夜杂感
《软件调试》面世后,得到了很多读者的好评,这是我写作这本书得到的最大快乐和收获。但是最近在China-pub网站上,却有人不断的挑剔,首先是批评定价高。我尝试做了几次解释,但是无济于事,于是决定不予理睬,省下时间做些更有意义的事。 但是今晚我意外的看到,有人在批评David所写的序言,指责David“没怎么看的书也作序推荐”,而且对David使用了很粗劣的语言。看了这样的评论后,我真的很气愤。思考良久,做了如下回复: “David是在看了详细的英文目录和简介后写了上面的短评。他写的都是客观的事实(包括覆盖面、篇章结构、深度等在详细的三级目录中都是可以看得出的呀)和他的感受。我和David的交往并不很多,在他看了书的初步框架后,他就对书的内容很感兴趣,乐意为这本书写序,今年4月书即将完成,我又给他写信时,另外意外的是,他竟然说在他的Outlook里已经有了一个reminder。我想他这样的名人能动笔主要是因为这本书的主题吸引了他。凭借他的资历,他早已认识到了调试的重要性。他对自己感兴趣的东西说几句话何过之有?至于这本书到底怎么样,你完全可以自己来判断,可以看样章,也可以参考其他读者的讨论(http://advdbg.org/forums/75/ShowForum.aspx)。David是国际知名的操作系统专家,备受世界各地技术人员的尊重,不知你资历如何,竟对他出言不逊?难道他不懂中文,你就可以轻易使用中文的词汇来骂他么?语种的差异其实很多时候并不是障碍,真诚和至善很容易打破这个障碍,同时这个障碍也遮不住低俗和丑恶。” 更多...

发布于 Saturday, August 16, 2008 12:50 AMRaymond12 篇评论

内核调试的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传递数据。 更多...

发布于 Wednesday, August 06, 2008 9:30 PMRaymond0 篇评论

Vista的启动调试
在Vista之前,NTLDR是Windows操作系统的加载程序,它负责将CPU从实模式切换为保护模式,加载内核文件和启动类型的驱动程序,然后把执行权交给内核文件的入口函数,即KiSystemStartup。 从要完成的任务角度来看,NTLDR内部又分为两个部分,一部分负责接受执行权,做模式切换,硬件检查,即启动的准备工作,这部分通常称为boot;另一部分负责加载内核文件,并为内核的运行做必要的准备,通常称为OsLoader。 Vista将以上两个部分分成两个独立的程序文件,即BootMgr和WinLoad.exe。下图描述了BootMgr和WinLoad的相互关系和它们在启动过程中的作用。 更多...

发布于 Monday, July 28, 2008 9:54 PMRaymond2 篇评论

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

发布于 Thursday, July 03, 2008 10:34 PMRaymond1 篇评论

《软件调试》与《Windows高级调试》比较之我见
   我是在2007年11月听说Advanced Windows Debugging(姑且翻译为《Windows高级调试》,简称AWD)这本书的。一个朋友和我说有一本书和你在写的书很相似,已经要出版了。朋友这样说当然是好意,防止我白费功夫重复劳动。或者用英文说就是不要“Reinvent the wheel(重复发明轮子:-))”,其实中文也有很多类似的冷语,比如“吃人家嚼过的馍”,其讽刺度之深比重新发明轮子还恨。我初听这个消息当然为之一振,可不想自己写了两年多(当时已经两年多)的东西与别人的一样。当晚我便GOOGLE了这(AWD)本书,当时在AMAZON上便有该书的预报,有章节目录。把章节目录看了两三遍后,我的担心慢慢散去了。从目录框架显然可以看出,AWD与我的《软件调试》大不一样。于是这个小“震动”只影响了我几个小时后,我便继续投入到《软件调试》的工作了,当时《软件调试》的第一稿也已经完成,在编辑和审阅第二稿的过程中。 更多...

发布于 Monday, June 09, 2008 9:53 AMRaymond3 篇评论

《软件调试》的主页
《软件调试》于上周进入工厂印刷,第一本有望在本周装订完成。第一本审查无误后,那么第一批600册将在下周完成! 同时,《软件调试》的主页也初步建成,网址为http://advdbg.org/books/swdbg/。欢迎大家访问和提宝贵意见!   更多...

发布于 Tuesday, May 27, 2008 11:31 PMRaymond7 篇评论

迎接2008!
2008年的第一天,阳光灿烂!对于上海这个多阴多雨的城市,这冬日的阳光着实是为新的一年送了一份厚礼! 每个人对新的一年都会有很多期待,北京奥运会无疑是最有共性的一个。于我,《软件调试》的出版是第一号的期待。一些热心的朋友也在期待这本书,他们的期待是我的动力。 以下是《软件调试》一书的主要内容,全书共30章,分为六篇。 第一部分:绪论(第1章)作为全书的开篇,这一部分介绍了软件调试的概念、基本过程、分类、和简要历史,并浏览了本书后面将详细介绍的主要调试技术。 第二部分:CPU的调试支持(2~7章)CPU是计算机系统的硬件核心。这一部分以IA-32 更多...

发布于 Tuesday, January 01, 2008 10:21 AMRaymond5 篇评论

它山之石,可以攻玉
泰克(http://www.tek.com/)是全球著名的测试测量仪器生产厂商,它的最著名产品是示波器。从调试的角度来看,示波器对于硬件工程师来说就好像是软件工程师使用的调试器。 在硬件领域,已经形成了一个不算太小的产业来专门生产以示波器、逻辑分析仪为代表的测试和调试设备,人们愿意以高昂的价格来购买这些设备,厂商们也不断的加大投入来研发更好、更先进、价格也更昂贵的设备。 与硬件领域相比,软件领域中人们对调试的重视真是天壤之别。著名的SoftICE在去年宣布停止开发了(看高手们对此是多么伤心http://blogs.msdn.com/matt_pietrek/archive/2006/04/07/570927.aspx)。Syser的开发还在维持,但是开发者最大的顾虑不是技术难度,而是客户太少。 更多...

发布于 Wednesday, November 28, 2007 8:14 PMRaymond0 篇评论

让WinDBG显示自己的调试信息
WinDBG是个调试器,但其本身也是个软件,也有BUG,这就好像医生也会生病一样。如何调试WinDBG呢?WinDBG的设计者们早考虑到了。比如.dbgdbg命令就是启动一个调试器来调试当前的调试器。 再如,使用.outmask命令可以让WinDBG输出自己的调试信息。参数可以是下表中的各个标志位的组合。 Value Default setting Description 1 On Normal output 2 On Error output 更多...

发布于 Monday, July 30, 2007 12:51 PMRaymond0 篇评论

通过XP的新命令行工具查询DRIVER信息
Windows XP附带了一个很好的小工具driverquery,使用它可以很轻松的查询出本机或远程系统中的驱动信息。尤其是给系统管理员和驱动程序开发人员带来了很大方便。 Driverquery是个控制台程序,位于Windows系统的system32目录下(大小50多K),因此你可以在任何控制台窗口运行它。 不带任何参数,便可以列出目前系统中已经加载的所有驱动,是按名字列出的。 Module Name  Display Name           更多...

发布于 Friday, May 12, 2006 10:21 PMRaymond0 篇评论

调试笔记:BSOD 0xA
Stop A (IRQL_NOT_LESS_OR_EQUAL ) 是比较多见又难以解决的一个内核问题。本文以一个真实例子对其稍加分析。 首先把内核转储文件调入到WinDbg中,并使用!analyze -v了解概况如下: IRQL_NOT_LESS_OR_EQUAL (a)An attempt was made to access a pageable (or completely invalid) address at aninterrupt request level (IRQL) that 更多...

发布于 Friday, May 12, 2006 10:12 PMRaymond0 篇评论

Windows全局标志(Gflags)
Gflags Flag Reference 摘自TechNet,原始链接为:http://technet2.microsoft.com/WindowsServer/en/Library/6a183942-57b1-45e0-8b4c-c546aa1b8c471033.mspx Buffer DbgPrint output Abbreviation ddp Hexadecimal value 0x08000000 Symbolic Name 更多...

发布于 Thursday, May 04, 2006 5:58 PMRaymond0 篇评论

BlackHat的高端培训
BlackHat的历年高端培训资料: http://www.blackhat.com/html/bh-media-archives/bh-multi-media-archives.html#USA-2005 将由微软的两个人(Jason Geffner & Scott Lambert)deliver的培训: http://www.blackhat.com/html/bh-usa-06/train-bh-us-06-sl-advmal.html 大家有空时慢慢挖掘吧,其中有用的内容应该不少 更多...

发布于 Sunday, April 23, 2006 10:52 AMRaymond0 篇评论

"checked" build 和"free" build的来历
Where do "checked" and "free" come from? By Larry Osterman People who have MSDN or the DDK know that Windows is typically built in two different flavors, "Checked" and "Free".  The primary difference between the two is that the "checked" build 更多...

发布于 Tuesday, April 18, 2006 2:24 PMadmin0 篇评论

KeBugCheck2的第6个参数
大家知道,DDK公开了两个内核API用于产生BSOD,分别是KeBugCheck()和KeBugCheckEx()。其原型分别如下: VOID   KeBugCheck(IN ULONG  BugCheckCode    ); VOID   KeBugCheckEx(IN ULONG BugCheckCode,    IN ULONG_PTR  BugCheckParameter1,    更多...

发布于 Monday, March 13, 2006 10:38 AMRaymond0 篇评论

WinDbg不同版本间的主要差异
近一两年来,WinDbg的版本更新差不多每月都有,这种速度也侧面证明了微软内部对WinDbg的重视,否则不会升级这么快吧?而且可以看出其发展是和微软的其它技术发展同步的。比如DotNet热时WinDbg的那几个版本加了很多对调试托管代码的支持,64位热时,WinDbg便加入对WOW64的支持。无疑微软的很多内部团队也在使用WinDbg做调试。当他们发现问题或有新的要求时就会让WinDbg改正或加入。 版本升级这么快,有时真的不知道每个版本到底有什么变化,该不该升级?还好微软的站点上有一个简单的列表关于每个版本的变化。但这个LISt已经不包括6.2以前的版本(大约是05年3月)了。说不定现在包括的版本过几个月也不见了。赶紧贴过来吧! 更多...

发布于 Tuesday, March 07, 2006 2:35 AMadmin1 篇评论

关于驱动开发的几个必读BLOG 票数 优秀 [5 out of 5]。
对于从事Windows驱动开发的朋友,或者是对Windows内核感兴趣的朋友,以下几个BLOG值得经常看看! 1,Kernel Mustard by Steve Dispensa link: http://kernelmustard.com/category/ddk/ 他以前的BLOG地址为:http://msmvps.com/blogs/kernelmustard/default.aspx 2,Larry Osterman's WebLog - Confessions of an 更多...

发布于 Thursday, March 02, 2006 2:52 PMadmin1 篇评论

学习软件调试原理的意义
曾经一度我面试应聘者的一个问题就是调试断点的工作原理,令我非常遗憾的是,无论是刚毕业的本科生或研究生,还是有多年工作经验的老程序员,都未能给我一个满意的答案。 当我与一些朋友聊起这个话题时,我遇到一种说法,令我深思。这种说法是我知道这个有什么意义呢? 是啊,现今是个知识爆炸的年代,新技术、新理念层出不穷,我们必须有选选择,目标明确的取舍自己的学习和努力方向。 但是,在这个前提下,我仍然认为调试原理是每个程序员的一门必修课。这不是我的一家之言,很多资深的行业专家,他们也在各种场合发表过类似的观点。 更多...

发布于 Thursday, October 13, 2005 10:49 PMdbg2 篇评论

Resource for this Category

Interop Debugging Raymond Type: application/vnd.ms-powerpoint
这是Raymond在俱乐部演讲的PPT。
Size: 640000 Bytes 184
如何调试Windows子系统服务器进程 Raymond Type: application/msword
这是Raymond在《程序员》杂志上的调试专栏系列文章之一。
Size: 198144 Bytes 198
CPU的机器检查机制 Raymond Type: application/msword
这是Raymond在《程序员》杂志上的调试专栏系列文章之一。
Size: 160256 Bytes 202
PCI标准(Rev2.2) SIG Type: application/pdf
尽管今天PCI Express总线已经逐渐普及,但是PCI Express总线在很多方面(尤其是软件层次)沿用了PCI标准中的很多内容。
Size: 3835553 Bytes 119
《软件调试》快谈 张银奎 Type: application/vnd.ms-powerpoint
关于《软件调试》一书的演讲讲义(PPT)。
Size: 1740800 Bytes 104
 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2005 Advanced Debugging Ltd. All Rights Reserved.