windbg使用定位内核内存泄露

零 打开驱动测试测试工具  

verifier /standard /driver fileflt.sys  然后重启电脑等待生效

一 设置 Windows 内核调试的符号路径和模块加载

1. 设置微软符号服务器路径:
在 WinDbg 中,可以通过以下命令设置符号路径:
```
.sympath srv*c:\symbols*http://msdl.microsoft.com/download/symbols
```
或者在环境变量中设置 _NT_SYMBOL_PATH:
```
set _NT_SYMBOL_PATH=srv*c:\symbols*http://msdl.microsoft.com/download/symbols
```

2. 重新加载符号:
```
.reload /f
```

3. 检查已加载的模块:
```
lm              # 列出所有加载的模块
lm m nt         # 查看特定模块(如 nt)
```

4. 加载自己的驱动模块符号:
如果你的驱动模块已经加载但符号未正确加载,可以:
```
.reload /f yourdriver.sys    # 替换 yourdriver.sys 为你的驱动名称
```

5. 验证符号是否正确加载:
```
!sym noisy      # 打开详细符号加载信息
x *!*           # 显示所有符号
```

6. 常用调试命令:
```
!analyze -v     # 详细分析当前异常
db              # 显示内存内容
dt              # 显示数据类型
```

二设置驱动卸载断点 (用于查看线程 dpc 其他资源)

在 fileflt 驱动模块中查找 FilterUnload 函数 比如模块叫fileflt.sys

在 WinDbg 中使用以下命令:
```
x fileflt!*FilterUnload*
```

这个命令会显示所有包含 "FilterUnload" 的符号。如果没有显示结果,可以尝试以下排查步骤:

1. 首先确认模块是否正确加载:
```
lm m fileflt      # 查看 fileflt 模块的加载状态
```

2. 如果需要重新加载符号:
```
.reload /f fileflt
```

3. 可以使用更宽泛的搜索:
```
x fileflt*       # 列出 fileflt 模块的所有符号
```

4. 检查符号路径是否正确:
```
.sympath        # 显示当前符号路径
```

5. 打开详细的符号加载信息:
```
!sym noisy      # 开启详细符号加载信息
```

三  由于内存泄露 verifier可能会触发蓝屏特别是win10

!analyze -v

windbg返回

DRIVER_VERIFIER_DETECTED_VIOLATION (c4)
A device driver attempting to corrupt the system has been caught.  This is
because the driver was specified in the registry as being suspect (by the
administrator) and the kernel has enabled substantial checking of this driver.
If the driver attempts to corrupt the system, BugChecks 0xC4, 0xC1 and 0xA will
be among the most commonly seen crashes.
Arguments:
Arg1: 0000000000000062, A driver has forgotten to free its pool allocations prior to unloading.
Arg2: ffff8687553fad48, name of the driver having the issue.
Arg3: ffff868756236710, verifier internal structure with driver information.
Arg4: 0000000000000003, total # of (paged+nonpaged) allocations that weren't freed.
    Type !verifier 3 drivername.sys for info on the allocations
    that were leaked that caused the bugcheck.

执行   !verifier 3  查看 哪块内存泄露

查看  ExAllocatePoolWithTag 分配代带标记的内存  可以直接定位到代码行 

RaiseIrqls           0x0
  AcquireSpinLocks     0x0
  Synch Executions     0x0
  Trims                0xa77

  Pool Allocations Attempted             0x46d737
  Pool Allocations Succeeded             0x46d736
  Pool Allocations Succeeded SpecialPool 0x46d736
  Pool Allocations With NO TAG           0x0
  Pool Allocations Failed                0x0

  Current paged pool allocations         0x0 for 00000000 bytes
  Peak paged pool allocations            0x7 for 0000008B bytes
  Current nonpaged pool allocations      0x3 for 00000108 bytes
  Peak nonpaged pool allocations         0x66 for 0007D390 bytes

Driver Verification List
------------------------

nt!_VF_TARGET_DRIVER 0xffff868754cf8360: fileflt.sys (Loaded and Unloaded)

    Pool Allocation Statistics: ( NonPagedPool / PagedPool )

      Current Pool Allocations: ( 0x00000003 / 0x00000000 )
      Current Pool Bytes:       ( 0x00000108 / 0x00000000 )
      Peak Pool Allocations:    ( 0x00000066 / 0x00000007 )
      Peak Pool Bytes:          ( 0x0007d390 / 0x0000008b )
      Contiguous Memory Bytes:       0x00000000
      Peak Contiguous Memory Bytes:  0x00000000

    Pool Allocations:

      Address             Length      Tag   Caller Address    
      ------------------  ----------  ----  ------------------
      0xffff868753374fa0  0x00000058  Vfwi  0xfffff805649335c2  fileflt!QueueAsyncSendCommPort+0x92
      0xffff868758086fa0  0x00000058  Vfwi  0xfffff805649335c2  fileflt!QueueAsyncSendCommPort+0x92
      0xffff868758d40fa0  0x00000058  Vfwi  0xfffff805649335c2  fileflt!QueueAsyncSendCommPort+0x92

    Contiguous allocations are not displayed with public symbols.

然后  ln fileflt!QueueAsyncSendCommPort+0x92  就可以定位到某段代码然后解决问题。。。

具体命令还有 

!verifier 3 fileflt.sys

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3使用monaco编辑器(VSCode网页版)

vue3使用monaco编辑器(VSCode网页版) 文章说明参考文章核心代码效果展示实践说明源码下载 文章说明 一直在找网页版的编辑器,网页版的VSCode功能很强大,这个monaco就是VSCode样式的编辑器,功能很强大,可以直…

Vue.js 组件开发进阶:构建可扩展的组件库

在构建大型应用或企业级前端项目时,往往需要将多个组件模块化、封装成可复用的组件库。这种组件库不仅能够大幅提升开发效率,还能确保一致的用户体验和易于维护的代码结构。Vue.js 作为一个渐进式的前端框架,其灵活的组件化设计使得开发高质量…

UWB数字钥匙安全测距和场景应用

1. CCC数字钥匙 2021年7月CCC将UWB定义为第三代数字钥匙的核心技术,并发布CCC R3(第三代数字钥匙)规范。 CCC R3是基于NFC/BLE/UWB作为基础的无线电技术的使用,该系统采用非对称密码技术对车辆和设备进行相互签名认证&#xff0…

SpringBoot小知识(2):日志

日志是开发项目中非常重要的一个环节,它是程序员在检查程序运行的手段之一。 1.日志的基础操作 1.1 日志的作用 编程期调试代码运营期记录信息: * 记录日常运营重要信息(峰值流量、平均响应时长……) * 记录应用报错信息(错误堆栈) * 记录运维过程数据(…

SAP Native SQL 的简单说明

Open SQL访问数据字典中声明的数据库表,不区分数据库类型,执行时会自动转换为对应的语句,且可以使用本地缓存。Native SQL使用特定于数据库的SQL语句,但是可以访问比Open SQL 更多的表,更多的操作,缺点也很明显&#x…

2024前端面试经验分享

一、简历 1、整理步骤 把自己过去做过的有亮点的事情整理一遍。项目经历,通过 star 法则来做,不赘述,网上很多人讲。需要突出的亮点见下面。 2、前端开发常见突出亮点: 性能优化代码优化组件封装框架原理项目推进、协调能力技…

IEEE 802.11s wifi mesh网络

IEEE 802.11s 是对 IEEE 802.11 标准的扩展,允许多个无线节点相互连接,而无需在它们之间有接入点(AP)。例如,如果您家里有一个 AP,您想将文件复制到另一台连接到相同 AP 的笔记本电脑 B(与您的笔…

Git中HEAD、工作树和索引的区别

在Git版本控制系统中,HEAD、工作树(Working Tree)和索引(Index)是三个非常重要的概念,它们分别代表了不同的状态或区域,下面我将对这三个概念进行详细的解释。 HEAD 定义:HEAD是一…

ARP欺骗-监控网络

kali: 使用arp-scan -l 查看同个局域网 windows arp -a 查看地址的物理地址 192.168.21.2 对应的是00-50-56-f5-d5-f0 攻击利用: 我们要让目标ip的流量经过我的网卡,从网关出去 使用的开启 echo 1 > /proc/sys/net/ipv4/ip_forward 当为0时,我们不转发&…

HTML 画布:网页上的创意绘图板

HTML 画布:网页上的创意绘图板 HTML5的画布(Canvas)元素为网页开发者提供了一种在网页上绘制图形和动画的强大工具。它是HTML5标准的一部分,被设计为允许脚本语言(通常是JavaScript)动态渲染图形、图像和动画。在这篇文章中,我们将深入探讨HTML画布的各个方面,包括其基…

pycharm链接neo4j(导入文件)

1.新建csv文件 2.写入文件 3.运行代码 import csv from py2neo import Graph, Node# 连接到Neo4j数据库,使用Bolt协议 graph Graph("bolt://localhost:7687", auth("neo4j", "password"))# 读取CSV文件 with open(D:\\Users\\ran…

Lodash的debounce方法:优化你的函数调用

在JavaScript开发中,我们经常会遇到需要在特定事件触发后执行某些操作的情况,比如窗口调整大小、滚动、按键输入等。然而,如果这些事件被频繁触发,相应的函数也会被频繁调用,这可能导致性能问题。这时,Loda…

YOLO系列论文综述(从YOLOv1到YOLOv11)【第15篇(完结):讨论和未来展望】

总结 0 前言1 YOLO与人工通用智能(AGI)2 YOLO作为“能够行动的神经网络”3 具身人工智能(EAI)4 边缘设备上的YOLO5 评估统计指标的挑战6 YOLO与环境影响 YOLO系列博文: 【第1篇:概述物体检测算法发展史、YO…

数据结构4——栈和队列

目录 1.栈 1.1.栈的概念及结构 1.2栈的实现 2.队列 2.1队列的概念及结构 2.2队列的实现 1.栈 1.1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一段称为栈顶,另一端称为…

SSM搭建(1)——配置MyBatis

目录 一、框架概述 1.什么是JDBC? 2.JDBC基本流程 3.JDBC的缺点 二、MyBatis的入门程序 1. 创建数据库和表结构 2. MyBatis入门流程总结 3. MyBatis的入门步骤 (1) 创建maven的项目,创建Java工程即可。 &…

Stream API进行分组并收集某个属性到List

在Java中,使用Stream API进行分组并收集某个属性到List中是一种常见的操作。这可以通过Collectors.groupingBy和Collectors.mapping结合使用来实现。下面是一个具体的示例: 假设我们有一个Person类,其中包含name和age属性,我们想…

Zero to JupyterHub with Kubernetes上篇 - Kubernetes 离线二进制部署

前言: 纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 k8s二进…

阻塞式队列

目录 一、阻塞队列 阻塞队列的概念 生产者消费者模型 二、自定义实现阻塞队列 一、阻塞队列 阻塞队列的概念 队列我们并不默认,一提起队列,我们立马就能想到 "先进先出"的特性。 今天我们就来学习一下特殊的队列: 阻塞队列,它…

开发一套ERP 第八弹 RUst 插入数据

更全面的报错,方便检查错误在哪里,现代高级语言越来越智能 还是得看下原文档怎么操作的 src 目录为crate 的根目录 想在crate 中模块相互引入需要在 main 中声明,各个模块,然后才能在各个模块中相互引入和使用 原始工程引入,避免直接使用 lib.rs 回合cargo 中的一些 工程管理出…

剖析 SpringBoot 于夕阳红公寓管理系统架构搭建的核心作用

3 系统分析 本文作者在确定了研究的课题之后,从各大数字图书馆下载文献来阅读,并了解同类型的网站具备的大致功能,然后与本系统用户的实际需求结合进行分析,得出本系统要研究的具体功能与性能。虽然分析系统这一阶段性工作主要是确…