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. deppin Linux下安装docker

    首先楼主用的是deppin15.11 docker 简介:Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中. ...

  2. idea使用git进行项目管理

    第一部分: 安装 1. 下载地址:  https://git-scm.com/download/win; 如果速度慢, 使用 迅雷下载; 2. 点击安装, 然后下一步, 直到下面这个页面: 建议: 按 ...

  3. 又一个js乱码的秘密alert放在js文件里中文乱码,可是放在HTML里显示中文就很好

    用文本文档打开你的js文件,文件-另存为,编码更改为UTF-8保存. 回复 | PFly | 园豆:94 (初学一级) | 2017-07-17 21:32 显示结果中文乱码 支持(0)反对(0)回复 ...

  4. mysql DML select查询

    windows上的操作 1.从官网下载mysql 下载navicat,用来连接mysql的 2.打开运行启动mysql 3.在navicat上的连接打开新建连接 然后输入链接名,连接名就是用户名,自己 ...

  5. base64的使用

    import base64with open("test.jpg", "rb") as f: file = f.read()file_base64 = base ...

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

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

  7. centos下安装opencv

    根据项目需要,安装opencv并提供给开发使用,并且使用opencv提供python3的API接口.虽然不知道是个啥,还是简单了解下. opencv是什么? OpenCV的全称是Open Source ...

  8. nginx的rewrite跳转

    Rewrite标记flag

  9. sqlserver 智能提示插件

    文章:SqlServer智能提示插件SQLPrompt 地址:https://blog.csdn.net/u013628152/article/details/83274478

  10. unicode转换为中文

    unicode转换为中文 \u5f53\u5730\u65f6\u95f42019\u5e747\u670813\u65e5\uff0c\u82f1\u56fd\u8d1d\u5fb7\u798f\u ...