windbgpreview详解

一、从windbgpreview下载

windbgpreview是微软官方推出的一款调试工具,可以用于调试Windows系统和应用程序,其界面友好,功能强大。它可以管理运行的进程,监视线程,跟踪系统内核函数的执行情况,诊断内存泄漏和损坏等问题。

windbgpreview可以从Windows Store下载,也可以从官方网站https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk和https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools下载。下载后,安装即可使用。

二、windbgpreview怎么用

首先,需要以管理员权限启动windbgpreview。启动后,菜单栏上的File可以用于打开要调试的应用程序或数据文件。如果要调试进程,可以按下F6或使用Attach to Process菜单项。如果要调试内核,需要在启动时使用-c参数,并以管理员身份启动。在windbgpreview中,还可以使用以下命令列出进程或线程、查看调试目标状态、设置断点、跟踪堆栈、查看内存内容等:

?或help:列出可用命令帮助
~或~*:列出所有线程信息
~tid:列出指定tid的线程信息
.dp /m:列出内存分页信息
.dump /ma /u /f filename:将调试目标的内存转储到指定文件
!analyze:分析调试目标崩溃的原因

三、windbgpreview堆栈溢出调试

当程序在执行过程中发生错误,windbgpreview可以跟踪堆栈,并查找是否发生堆栈溢出。下面是一个简单的堆栈溢出漏洞实例:

#include <stdio.h>
#include <string.h>

void vuln(char *str)
{
    char buf[100];
    strcpy(buf, str);
}

void main(int argc, char **argv)
{
    vuln(argv[1]);
    printf("Over!\n");
}

上述代码定义了一个函数vuln,其中调用了strcpy函数将输入的字符串拷贝至buf缓冲区,存在缓冲区溢出漏洞。如果在调用vuln函数时传入长度超过100的字符串,那么溢出就会发生。

要在windbgpreview中调试该漏洞,需要将代码编译为可执行文件,并在命令行传入恶意输入。在windbgpreview中,首先需要输入以下命令:

windbg -g -Q

然后,使用File/Open Executable菜单项打开编译好的可执行文件。

输入以下命令以启动程序:

g

接着,输入以下命令设置断点:

bp vuln

然后,输入以下命令以执行在断点处停止的程序:

g AAAABBBBCCCCDDDD...

其中,AAAABBBBCCCCDDDD是要传入的恶意输入。程序会在调用vuln函数时停止。输入k命令查看当前的函数堆栈:

k

堆栈信息中,可以看到vuln函数的返回地址被覆盖,即发生了堆栈溢出。

四、windbgpreview为何打不开

如果在打开windbgpreview时发生错误,可以尝试以下步骤解决问题:

1、检查是否安装了Visual Studio,Visual Studio是使用windbgpreview的前提条件之一。

2、检查是否安装了对应版本的Windows软件开发工具包,在使用windbgpreview时需要使用对应版本的工具包。

3、尝试重新安装windbgpreview。

4、查找并修复可能导致问题的Windows更新或驱动程序。

五、windbgpreview为何没有lanalyze

在windbgpreview中,与LANalyze类似的功能是在Detours库中实现的。Detours库是微软官方推出的一款钩子技术库,可以对任意函数进行拦截、重定向、跟踪等操作,包含了LANalyze类似的堆追踪功能。要在windbgpreview中使用Detours库,可以按照以下步骤操作:

1、下载Detours库,将其解压缩到合适的位置。

2、在windbgpreview中输入以下命令:

.load \detours.dll

其中,是Detours库所在目录的路径。

3、输入以下命令,使windbgpreview能够加载Detours库的符号:

.symfix+ \detours.pdb

其中,是Detours库pdb文件所在目录的路径。

4、使用Detours库调试想要拦截的函数。

六、windbgpreview调试内核设置选取

要在windbgpreview中调试内核,需要进行以下设置:

1、打开目标Windows机器的调试功能,具体方式与版本相关。

2、在启动Windows时选取启动项:启用调试选取(DEBUG)。

3、连接windbgpreview与目标Windows机器,可以使用串口、网络等方式连接。

4、启动windbgpreview,菜单栏上的File/Open Kernel Dump可以用于打开内核转储文件,选择正确的机器架构,打开文件。

5、使用当地符号服务器,可以输入命令.symfix或.symfix+避免符号加载的问题。

6、在非常低的内核级别,可以使用dp(Display Page)命令查看内存页的内容。

总之,windbgpreview作为一款强大的调试工具,可以在多种场景下使用。通过学习windbgpreview的使用方法,可以提高Windows系统和应用程序的调试效率。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/156816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-18 01:57
下一篇 2024-11-18 01:57

相关推荐

  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25

发表回复

登录后才能评论