使用WinDbg调试入门(用户模式)
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处设置和验证断点,请输入以下命令:
10、输入g重新开始运行记事本。在记事本窗口中,输入一些文本,然后从“文件”菜单中选择“保存”。当涉及zwCreateFile时,正在运行的代码将中断。输入k以查看堆栈跟踪。

用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+ C:\MyApp\x64\Debug
现在,windbg知道在哪里可以找到应用程序的符号和源代码。
4、输入下面的命令:

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

使用WinDbg调试入门(用户模式)的更多相关文章
- 使用WinDbg调试入门(内核模式)
windbg是一个内核模式和用户模式调试器,包含在Windows调试工具中.这里我们提供了一些实践练习,可以帮助您开始使用windbg作为内核模式调试器. 设置内核模式调试 内核模式调试环境通常有两台 ...
- .NET高级调试系列-Windbg调试入门篇
Windbg是.NET高级调试领域中不可或缺的一个工具和利器,也是日常我们分析解决问题的必备.准备近期写2篇精华文章,集中给大家分享一下如果通过Windbg进行.NET高级调试. 今天我们来一篇入门的 ...
- WinDbg调试DMP格式文件
前言:WinDbg是微软开发的免费源代码级的调试工具.WinDbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件.本文的讨论是在安装了Debugging Tools for Win ...
- 使用Windbg调试内核
Windbg是微软开发的免费源码级调试工具.Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. 1.从http://www.microsoft.com/whdc/devt ...
- 使用WinDbg调试SQL Server——入门
这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...
- 使用Visual Studio调试用户模式进程(Debugging a User-Mode Process Using Visual Studio)
由于本人能力有限,翻译不足之处敬请谅解,欢迎批评指正:sunylat@163.com Visual Studio版本:Visual Studio 2015企业版,中文环境. MSDN原文:https: ...
- WinDbg调试.NET程序入门
俗话说:万事开头难! 自从来到新公司遇到性能问题后,需要想办法解决这个问题,但是一直没有合适的性能分析工具,然后找到StevenChennet 大神帮忙,他用WinDbg工具远程帮我分析了一个 dum ...
- 【旧文章搬运】Windbg+Vmware驱动调试入门(三)---Windbg基本调试入门
原文发表于百度空间,2009-01-09========================================================================== 这一节的内 ...
- 【旧文章搬运】Windbg+Vmware驱动调试入门(一)---Windbg的设置
原文发表于百度空间,2009-01-08========================================================================== Windb ...
随机推荐
- oracle基础知识语法大全
ORACLE支持五种类型的完整性约束NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值.CHECK (检查)--检查在约束中 ...
- C# 截取字符串方法总结
第一种:根据单个分隔字符用split截取 string st="GT123_1"; string[] sArray=st.split("_"); //即可得到s ...
- 静态工具类注入service的方法
http://blog.sina.com.cn/s/blog_6e2d53050102wl3x.html
- 【转载】C#中List集合使用Max()方法查找到最大值
在C#的List集合操作中,有时候需要查找到List集合中的最大值,此时可以使用List集合的扩展方法Max方法,Max方法有2种形式,一种是不带任何参数的形式,适用于一些值类型变量的List集合,另 ...
- JAVA - @WebServlet的使用方法
在servlet3.0以后,我们可以不用再web.xml里面配置servlet,只需要加上@WebServlet注解就可以修改该servlet的属性了. 下面是@WebServlet的属性列表. 属性 ...
- iOS应用安全开发,你不知道的那些事
来源:http://www.csdn.net/article/2014-04-30/2819573-The-Secret-Of-App-Dev-Security 摘要:iOS应用由于其直接运行在手机上 ...
- idea 启动项目报错,more than one fragment with the name [spring web] was found
这是由于idea导入项目的时候有多个模块,并且有多个web.xml导致的,先删除对应的模块,后启动即可. 另外也有可能是spring的jar冲突,把冲突的jar删除即可.
- day 21 作业
定义MySQL类 对象有id.host.port三个属性 定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一 提供两种实例化方式,方式一:用户传入host和port 方式二:从 ...
- springboot+druid+mybatis
pom.xml <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId> ...
- Linux系统自动化安装之cobbler实现
一.cobbler简介 cobbler是快速网络安装linux操作系统的服务,支持众多的Linux发行版本,如redhat|.fedora.centos.debian.ubuntu和suse,也可以支 ...