2023年1月

你们都知道并喜欢DML,那些出现在WinDbg输出中的超链接,允许你们在思考崩溃代码的含义时漫无目的地点击。 但是,你知道DML在WinDbg的Windows10版本中甚至更好吗?已添加对游戏更改功能的支持:右键单击!
是的,您现在可以右键单击DML输出并打开一个新的选项菜单:

 

此菜单中包括在新窗口中打开链接的功能,同时弹出一个命令浏览器窗口,显示您的输出:

 

然后,您可以停靠或浮动此窗口,以便在继续分析时方便地获得输出(当然,命令浏览器已经存在一段时间了,但这只会使它更容易!)。

下面是在Visual C++ 中配置Windbg的一个例子。
首先找到下面的菜单

 

点击弹出

 

点击"Add"做如下配置

 

Title &Windbg
Command C:\Program Files (x86)\Debugging Tools for Windows (x86)\windbg.exe
Arguments -srcpath $(ProjectDir) $(TargetPath)
Initial directory $(TargetDir)

保存配置并测试它是否有效。打开生成可执行文件的项目。选择“工具”,然后选择“Windbg”启动调试器。

每次启动windbg时,我都会运行一些命令,我突然意识到,也许是时候将这些命令放到脚本中,让windbg自动执行它了。

首先,创建一个包含要运行的所有命令的文件。

对于本例,让我创建一个名为“dbg-prep.wds”的文件

C:\Users\ilhoye\Desktop\WinDbg> type dbg-prep.cmd
.symfix
.reload
.load mex
.load kdexts
aS
!pr !process

有时我遇到一些人,他们认为他们只需要知道调试器命令就可以成为一个好的调试人员。
这是一种误解。就像国际象棋:仅仅因为你知道游戏规则和如何移动棋子并不意味着你是一个好玩家。事实上,要想在国际象棋中取得好成绩,你需要学习的不仅仅是基础知识!要想成为象棋高手,你需要学习更多!
调试是一样的。调试、测试和开发代码是相关的主题。如果你是一个优秀的程序员,你就是一个优秀的测试人员和调试器。当然,那些花大部分时间进行测试和创建测试工具的人,拥有更高的软件测试技能。花大部分时间调试的人有更高的软件调试技能。

不管怎样,这三个活动是完全相关的,所以如果你想成为一个好的调试器,首先你应该知道如何编程。
由于很多原因,如果你想了解更多关于托管调试的话,我推荐先熟悉C++,然后C#。

一个好的调试人员应该知道以下几点:

  • 一种编程语言。建议使用C++。学习C++,你也会学习C语言。一定要学会如何使用面向对象的编程在C++中编程。我实际上学会了C,然后C++。
  • 了解Windows内部的知识,如API、消息流等。.
  • 能够读取反汇编代码。
  • 故障排除工具。
  • 如何(何时)使用调试器。
  • 如何根据基于假设的科学方法来隔离问题。

下面我列出了我最喜欢的书:

C/C++

Effective C++ (Meyers)

More Effective C++ (Meyers)

Efficient C++ (Bulka, Mayhew)

C++ Coding Standards ( Sutter, Alexandrescu)

Exceptional C++ and More Exceptional C++ (Herb Sutter)

C++ Common Knowledge (Stephen C. Dewhurst)

C++ Strategies and Tactics (Robert B. Murray)

Designing Object Oriented C++ Applications using the Booch Method (Martin)

C#

Programming Windows with C# (Petzold)

C# Programmer’s Cookbook (Jones)

Programming .NET Components (Lowy)

C# Cookbook (Hilyard & Teilhet)

CLR via C# 2nd Edition (Richter)

Applied Microsoft .NET Framework Programming (Jeffrey Richter)

Security

Writing Secure Code 2nd edition (Howard, LeBlanc)

Buffer Overflows (Foster)

Secure Coding in C and C++ (Seacord)

Rootkits (Greg Hoglund, James Butler)

Shellcoder’s Programming Uncovered (Kris Kaspersky)

Shellcoder’s Handbook (Koziol, Litchfield, Aitel, Anley, Eren, Mehta, Hassell)

Sockets, Shellcode, Porting & Coding (James C. Foster)

Exploiting Software (Greg Hoglund, Gary McGraw)

Hunting Security Bugs (Gallagher, Jeffries, Landauer)

Practical Malware Analysis (Sikorski, Honig)

Managed Code Rootkits: Hooking into Runtime Environments (Erez Metula)

Debugging

Debugging by Thinking (Metzger)

Debugging ASP.NET (Goodyear, Peek, Fox)

The Science of Debugging (Telles, Hsieh)

Software Exorcism (Blunden)

Debugging Applications for .NET and Windows (Robbins)

Debugging .Net 2.0 Applications (Robbins)

Debugging – The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware problems (Agans)

Debugging Windows Programs (McKay, Woodring)

Why Programs Fail: A guide to Systematic Debugging (Zeller)

Advanced Windows Debugging (Hewardt, Pravat)

Memory Dump Analysis Anthology - Volume 1 (Vostokov)

Memory Dump Analysis Anthology - Volume 2 (Vostokov)

Advanced .NET Debugging (Herwardt, Mario)

Windows Debugging Notebook - Essential User Space WinDbg Commands (Vostokov, Farah)

Inside Windows Debugging - A Practical Guide to Debugging and Tracing Strategies in Windows (Soulami, Tarik)