WinDbg实践--入门篇
WinDbg从字面意思就是Windows+Debug的组合,即Windows平台上的调试工具,可以调试用户模式、内核模式、dump文件等,总之知道它的调试功能非常强大就行了。WinDbg调试命令分为3种,分别是基本命令、元命令和扩展命令。基本命令和元命令是调试器自带的,元命令总以"."开头,而扩展命令总以"!"开头。后面的系列主要是通过例子+命令来实践WinDbg。
一.配置微软符号服务器[没能成功]
WinDbg在Windows程序中,通常都有一个和XXX.exe相同名字的XXX.pdb,pdb的全拼是Program Debug Database。pdb有自身的文件格式,它主要包含了调试信息,该文件是由链接器生成的符号文件。符号服务器[Symbol Server]本质上就是一个文件服务器,它把要调试的符号进行了集中存储,这样只要把WinDbg指向符号服务器就可以解析符号名称了。常用的公共符号服务器就是微软的符号服务器了,即http://msdl.microsoft.com/download/symbols,这个是调试Windows应用程序和Windows内核程序必不可少的。当然也可以搭建自己的符号服务器。
1.WinDbg默认的设置路径
File -> Settings -> Debugging settings,默认的源码路径、符号路径和缓存路径如下:

2.设置_NT_SYMBOL_PATH环境变量
设置_NT_SYMBOL_PATH环境变量的值为SRV*D:\mysymbol*https://msdl.microsoft.com/download/symbols:

在WinDbg中执行命令!sym noisy[显示详细加载信息]和.reload /f[加载符号]如下:

通过上图一看就是网络连接的问题。文章[6]讲要设置下proxy才行,设置_NT_SYMBOL_PROXY环境变量的值为127.0.0.1:19180:

按照操作proxy也设置和打开了,执行.reload /f命令依然原样报错,并且网上没有找到解决方案。打开https://msdl.microsoft.com/download/symbols提示如下:

说明:总之没有能够从微软的符号服务器下载数据,并且网上没有找到有效的解决方案。由于暂时也用不到这个,就先这样告一段落,有知情的小伙伴可以分享下解决方案。
二.WinDbg常用的命令
1.命令.cls
输入.cls清空Command窗口中的内容:

2.命令version
使用version命令查看版本信息:

3.命令vertarget
使用vertarget命令查看目标计算机版本信息:

4.命令lm
使用lm查看模块信息:

主要显示模块名称,模块开始地址,模块结束地址,模块路径等信息。
5.命令!dlls
使用!dlls命令查看模块信息:

6.命令.process
使用.process显示当前进程信息:

7.命令.thread
使用.thread显示当前线程信息:

8.命令!peb
使用!peb命令显示进程环境块信息:

9.命令!teb
使用!teb命令显示线程环境块信息:

10.命令!address -summary
使用!address -summary命令显示内容地址摘要信息:

11.命令.sympath
使用.sympath查看当前符号搜索路径等信息:

三.使用WinDbg打开notepad.exe
WinDbg开启调试的方式有很多种,这里使用打开可执行文件的方式:


使用WinDbg打开notepad.exe后,Command窗口显示内容如下:

主要显示Windows Debugger版本,执行性文件路径,符号搜索路径等信息。
四..NET探秘:MSIL权威指南
今天推荐的一本好书和老书是《.NET探秘:MSIL权威指南》,这本书以.NET2.0为基础,是讲解MSIL的权威著作,感兴趣的小伙伴可以下载[12]。后面要把WinDbg操作和MSIL实践融入到日常的.NET软件开发中,以提高软件的安全性。
参考文献:
[1]WinDbg用户态调试教程:https://bbs.pediy.com/thread-34379.htm
[2]Windbg新手入坑指南:https://www.52pojie.cn/thread-924116-1-1.html
[3]Windbg调试命令详解:http://yiiyee.cn/blog/2013/08/23/windbg/
[4]WinDbg用法详解:https://wenku.baidu.com/view/ca16ec6a306c1eb91a37f111f18583d049640fdc.html
[5]Good tutorial for WinDbg:https://stackoverflow.com/questions/4946685/good-tutorial-for-windbg
[6]WinDbg设置调试符号路径与调试符号下载:https://blog.csdn.net/qq_41252520/article/details/123095105
[7]dotnet/symreader-portable:https://github.com/dotnet/symreader-portable
[8]搭建自己的符号服务器:https://bbs.pediy.com/thread-262537.htm
[9]Windows调试工具:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/
[10]WinDbg Online Help:http://www.dbgtech.net/windbghelp/index.html
[11]WinDbg官方文档:http://www.windbg.org/
[12].NET探秘:MSIL权威指南:https://url39.ctfile.com/f/2501739-623685565-48209f?p=2096 (访问密码: 2096)
WinDbg实践--入门篇的更多相关文章
- .NET高级调试系列-Windbg调试入门篇
Windbg是.NET高级调试领域中不可或缺的一个工具和利器,也是日常我们分析解决问题的必备.准备近期写2篇精华文章,集中给大家分享一下如果通过Windbg进行.NET高级调试. 今天我们来一篇入门的 ...
- Python:Excel自动化实践入门篇 甲【留言点赞领图书门票】
*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s?__biz=MzUxMTgxMzExNQ==&mid=22 ...
- Python:Excel自动化实践入门篇 乙【送图书活动继续】
*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/y-npGelPJwmx3iNvHaXRTg 本文上接<Py ...
- Spring实践系列-入门篇(一)
本文主要介绍了在本地搭建并运行一个Spring应用,演示了Spring依赖注入的特性 1 环境搭建 1.1 Maven依赖 目前只用到依赖注入的功能,故以下三个包已满足使用. <properti ...
- spring boot(一):入门篇
构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- 1. web前端开发分享-css,js入门篇
关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...
- Unity3D大风暴之入门篇(海量教学视频版)
智画互动开发团队 编 ISBN 978-7-121-22242-9 2014年2月出版 定价:79.00元 328页 16开 编辑推荐 长达800分钟的高清教学视频,手把手教会初学者 数个开发案例 ...
- Quartz应用实践入门案例二(基于java工程)
在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...
- Quartz应用实践入门案例一(基于Web环境)
Quartz是一个完全由java编写的开源作业调度框架,正是因为这个框架整合了许多额外的功能,所以在使用上就显得相当容易.只是需要简单的配置一下就能轻松的使用任务调度了.在Quartz中,真正执行的j ...
- web前端开发分享-css,js入门篇(转)
转自:http://www.cnblogs.com/jikey/p/3600308.html 关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人 ...
随机推荐
- 实验四报告: 熟悉Python字典、集合、字符串的使用
实验目标 本实验的主要目标是熟悉Python中字典.集合.字符串的创建和操作,包括字典的创建.访问.修改和合并,集合的创建.访问以及各种集合运算,以及字符串的创建.格式化和常用操作. 实验要求 通过编 ...
- Spring Boot整合OAuth2实现GitHub第三方登录
Github OAuth 第三方登录示例 1.第三方登录原理 第三方登录的原理是借助OAuth授权来实现,首先用户先向客户端提供第三方网站的数据证明自己的身份获取授权码,然后客户端拿着授权码与授权服务 ...
- Python 利用pandas 和 matplotlib绘制柱状图
当你需要展示数据时,图表是一个非常有用的工具.Python 中的 pandas 和 matplotlib 库提供了丰富的功能,可以帮助你轻松地绘制各种类型的图表.本文将介绍如何使用这两个库,绘制一个店 ...
- jenkins实践篇(2)—— 自动打tag的可回滚发布模式
大家好,我是蓝胖子,在上一篇我简单介绍了如何基于特定分支做自动编译和发布,在生产环境中,为了更加安全和快速回滚,我采取的是通过对代码打tag的方式来进行部署,下面我将详细介绍整个发布过程的逻辑. 发布 ...
- SpringBoot系列之MyBatis Plus自动填充实现
系列博客专栏:SpringBoot2.0系列博客专栏 开发环境 JDK 1.8 SpringBoot2.2.1 Maven 3.2+ Mysql5.7.36 开发工具 IntelliJ IDEA sm ...
- 使用 Vue 3 插件(Plugin)实现 OIDC 登录和修改密码(OIDC 系统以 Keycloak 为例)
背景 目前单位系统常用 Keycloak 作为认证系统后端,而前端之前写的也比较随意,这次用 Vue 3 插件以及 Ref 响应式来编写这个模块.另外,这个可能是全网唯一使用 keycloak 的 O ...
- "拍牌神器"是怎样炼成的(二)--- 键鼠模拟之AutoIt
不同于上一篇的WinAPI方法,这次让我们来看另一个更简单.有效的键鼠模拟方案,即通过COM组件AutoItX实现键鼠模拟. AutoIt AutoIt是一个免费软件,它使用一种类似BASIC的脚本语 ...
- win11中无法识别STM32 BOOTLOADER的解决方法
如图,按照PYBoard的官方手册说可以直接右键选择自动更新驱动即可.但是我在WIN11上并没有成功. 主要是原因是,DFU模式下的STM设备驱动程序没有自动安装成功. 解决方法是手动安装一下驱动: ...
- CDQ分治(初步入门)
CDQ分治 CDQ分治,传说中是一个神犇创造的算法. 在了解这种算法之前,我们有必要了解一下一种基本的思想:分治. 分治介绍 分而治之,将原问题不断划分成若干个子问题,直到子问题规模小到足以直接解决 ...
- EventBus 简明教程
简介 EventBus 是一个用于 Android 和 Java 编程的 事件发布/订阅框架.使用 EventBus 进行事件传递,事件的发布和订阅就被充分解耦合,这使得编程人员从传统而原始的事件传递 ...