windbg是一个内核模式和用户模式调试器,包含在Windows调试工具中。在这里,提供个实践练习,帮助我们开始使用windbg作为用户模式调试器。

用WinDbg调试记事本

1、导航到安装目录,然后打开windbg.exe。

2、在“文件”菜单上,选择“打开可执行文件”。在“打开可执行文件”对话框中,导航到包含notepad.exe的文件夹(例如,C:\windows\system32)。输入notepad.exe作为“文件名”。单击“打开”。

3、在windbg窗口底部附近的命令行中,输入以下命令:.sympath srv*.

输出:

符号搜索路径告诉windbg在哪里查找符号(pdb)文件。调试器需要符号文件来获取有关代码模块(函数名、变量名等)的信息。
输入此命令,通知windbg执行符号文件的初始查找和加载:.reload

4、查看notepad.exe模块的符号

请输入以下命令:x notepad!*

注意:如果看不到任何输出,请输入.reload。要查看包含main的notepad.exe模块中的符号,请输入以下命令: x notepad!*main*

5、在记事本上设置断点notepad!WinMain,输入以下命令:bu notepad!WinMain

要验证是否设置了断点,请输入以下命令:bl

6、运行,请输入以下命令:g

记事本一直运行到winmain函数,然后中断到调试器。

要查看在记事本进程中加载的代码模块列表,请输入以下命令:lm

要查看堆栈跟踪,请输入以下命令:k

7、再次运行 g

8、要中断记事本执行,请从“调试”菜单中选择“中断”。

9、观察保存过程,要在zwwritefile处设置和验证断点,请输入以下命令:

bu ntdll!ZwWriteFile

bl

10、输入g重新开始运行记事本。在记事本窗口中,输入一些文本,然后从“文件”菜单中选择“保存”。当涉及zwCreateFile时,正在运行的代码将中断。输入k以查看堆栈跟踪。

在windbg窗口的命令行左侧,注意处理器和线程号。在本例中,当前处理器编号为0,当前线程编号为15。因此,我们正在查看线程151的堆栈跟踪(它恰好运行在处理器0上)。
11、要查看记事本进程中所有线程的列表,请输入以下命令:~
12、要查看线程0的堆栈跟踪,请输入以下命令:

~0s,k

13、要退出调试并从记事本进程中分离,请输入以下命令: qd

用Windbg调试自己的程序

编写并构建了下面这个小型控制台应用程序。
void MyFunction(long p1, long p2, long p3)
{
long x = p1 + p2 + p3;
long y = 0;
y = x / p2;
} void main ()
{
long a = 2;
long b = 0;
MyFunction(a, b, 5);
}

对于本练习,我们假设构建的应用程序(myapp.exe)和符号文件(myapp.pdb)位于C:\myapp\x64\debug中。我们还将假设应用程序源代码位于C:\myapp\myapp中。

1、打开Windbg

2、在“文件”菜单上,选择“打开可执行文件”。在“打开可执行文件”对话框中,导航到c:\myapp\x64\debug。输入myapp.exe作为“文件名”。单击“打开”。

3、输入下面的命令:

.sympath srv*

.sympath+ C:\MyApp\x64\Debug

.srcpath C:\MyApp\MyApp

现在,windbg知道在哪里可以找到应用程序的符号和源代码。

4、输入下面的命令:

.reload

bu MyApp!main

g

当应用程序涉及到它的主函数时,它就进入了调试器。windbg显示源代码和命令窗口。

5、在“调试”菜单上,选择“单步执行”(或按F11)。继续单步执行,直到进入MyFunction。当您单步执行y=x/p2行时,应用程序将崩溃并进入调试器。输出与此类似:

 

6、输入下面命令

!analyze -v

windbg显示对问题的分析(在本例中除以0)。
 

 

使用WinDbg调试入门(用户模式)的更多相关文章

  1. 使用WinDbg调试入门(内核模式)

    windbg是一个内核模式和用户模式调试器,包含在Windows调试工具中.这里我们提供了一些实践练习,可以帮助您开始使用windbg作为内核模式调试器. 设置内核模式调试 内核模式调试环境通常有两台 ...

  2. .NET高级调试系列-Windbg调试入门篇

    Windbg是.NET高级调试领域中不可或缺的一个工具和利器,也是日常我们分析解决问题的必备.准备近期写2篇精华文章,集中给大家分享一下如果通过Windbg进行.NET高级调试. 今天我们来一篇入门的 ...

  3. WinDbg调试DMP格式文件

    前言:WinDbg是微软开发的免费源代码级的调试工具.WinDbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件.本文的讨论是在安装了Debugging Tools for Win ...

  4. 使用Windbg调试内核

    Windbg是微软开发的免费源码级调试工具.Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. 1.从http://www.microsoft.com/whdc/devt ...

  5. 使用WinDbg调试SQL Server——入门

    这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...

  6. 使用Visual Studio调试用户模式进程(Debugging a User-Mode Process Using Visual Studio)

    由于本人能力有限,翻译不足之处敬请谅解,欢迎批评指正:sunylat@163.com Visual Studio版本:Visual Studio 2015企业版,中文环境. MSDN原文:https: ...

  7. WinDbg调试.NET程序入门

    俗话说:万事开头难! 自从来到新公司遇到性能问题后,需要想办法解决这个问题,但是一直没有合适的性能分析工具,然后找到StevenChennet 大神帮忙,他用WinDbg工具远程帮我分析了一个 dum ...

  8. 【旧文章搬运】Windbg+Vmware驱动调试入门(三)---Windbg基本调试入门

    原文发表于百度空间,2009-01-09========================================================================== 这一节的内 ...

  9. 【旧文章搬运】Windbg+Vmware驱动调试入门(一)---Windbg的设置

    原文发表于百度空间,2009-01-08========================================================================== Windb ...

随机推荐

  1. oracle基础知识语法大全

    ORACLE支持五种类型的完整性约束NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值.CHECK (检查)--检查在约束中 ...

  2. C# 截取字符串方法总结

    第一种:根据单个分隔字符用split截取 string st="GT123_1"; string[] sArray=st.split("_"); //即可得到s ...

  3. 静态工具类注入service的方法

    http://blog.sina.com.cn/s/blog_6e2d53050102wl3x.html

  4. 【转载】C#中List集合使用Max()方法查找到最大值

    在C#的List集合操作中,有时候需要查找到List集合中的最大值,此时可以使用List集合的扩展方法Max方法,Max方法有2种形式,一种是不带任何参数的形式,适用于一些值类型变量的List集合,另 ...

  5. JAVA - @WebServlet的使用方法

    在servlet3.0以后,我们可以不用再web.xml里面配置servlet,只需要加上@WebServlet注解就可以修改该servlet的属性了. 下面是@WebServlet的属性列表. 属性 ...

  6. iOS应用安全开发,你不知道的那些事

    来源:http://www.csdn.net/article/2014-04-30/2819573-The-Secret-Of-App-Dev-Security 摘要:iOS应用由于其直接运行在手机上 ...

  7. idea 启动项目报错,more than one fragment with the name [spring web] was found

    这是由于idea导入项目的时候有多个模块,并且有多个web.xml导致的,先删除对应的模块,后启动即可. 另外也有可能是spring的jar冲突,把冲突的jar删除即可.

  8. day 21 作业

    定义MySQL类 对象有id.host.port三个属性 定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一 提供两种实例化方式,方式一:用户传入host和port 方式二:从 ...

  9. springboot+druid+mybatis

    pom.xml <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId> ...

  10. Linux系统自动化安装之cobbler实现

    一.cobbler简介 cobbler是快速网络安装linux操作系统的服务,支持众多的Linux发行版本,如redhat|.fedora.centos.debian.ubuntu和suse,也可以支 ...