当前位置: 首页 > news >正文

windbg:常用指令

windbg 调试

参考文档

1、viewing-and-editing-global-variables-in-windbg

WinDBG 常用调试命令

加载符号

.sympath              // 查看当前符号查找路径
.sympath c:\symbols   // 将符号查找路径设为:c:\symbols
.sympath+ c:\symbols  // 将c:\symbols添加到符号查找路径集合中.reload               // 为所有已加载模块载入符号信息
.reload /f /v         // f:强制立即模式(不允许延迟载入)  v:详细模式
.reload /f @"c:\windows\System32\verifier.dll" // 为指定模块加载符号信息

系统模块与PE文件检索

0:000> lm                     // 列出所有模块对应的符号信息
0:000> lmv                    // 列出所有模块对应的符号信息
0:000> lmt                    // 列出所有模块的基地址和偏移
0:000> lmf                    // 列出所有DLL的具体路径
0:000> lmvm ntdll             // 查看ntdll.dll的详细信息
0:000> !lmi ntdll             // 查看ntdll.dll的详细信息
0:000> !dlls -a               // 列出镜像文件PE结构的文件头
0:000> !dlls -l               // 按照顺序列出所有加载的模块
0:000> !dlls -c ntCreateFile  // 查询指定函数所在的模块
0:000> !dlls -c ntdll.dll     // 列出特定模块头信息
0:000> !dlls -s -c ntdll.dll  // 列出ntdll.dll的节区
0:000> !dlls -v -c ntdll      // 查看ntdll.dll的详细信息0:000> ld *                   // 为所有模块加载符号
0:000> ld kernel32            // 加载kernel32.dll的符号
0:000> x*!                    // 列出加载的所有符号信息
0:000> x ntdll!*              // 列出ntdll.dll中的所有符号
0:000> x ntdll!nt*            // 列出ntdll.dll模块中所有nt开头的符号
0:000> x /t /v ntdll!*        // 带数据类型、符号类型和大小信息列出符号
0:000> x kernel32!*Load*      // 列出kernel32模块中所有含Load字样的符号

进程与线程操作

|                     // 列出调试进程
!dml_proc             // 显示当前进程信息
.tlist -v             // 列出所有运行中的进程
~                     // 列出线程
~.                    // 查看当前线程
~*                    // 所有线程
~0s                   // 查看主线程
~* k                  // 所有线程堆栈信息
~* r                  // 所有线程寄存器信息
~#                    // 查看导致当前事件或异常的线程
~N                    // 查看序数为N的线程
~~[n]                 // 查看线程ID为n的线程  n为16进制
~Ns                   // 切换序数为N的线程为当前调试线程
~~[n]s                // 切换线程ID为n的线程为当前调试线程  n为16进制
~3f                   // 把三号线程冻住 f-frozen
~2u                   // 把二号线程解冻~N n                  // Suspend序数为N的线程
~N m                  // Resume序数为N的线程
!runaway              //显示当前进程的所有线程用户态时间信息
!runaway f            //显示当前进程的所有线程用户态、内核态、存活时间信息
!locks                // 显示死锁
!cs                   // 列出CriticalSection(临界段)的详细信息0:000> .formats 1d78  // 格式化输出PID
!handle               // 查看所有句柄的ID

反汇编指令与内存断点

u                    // 反汇编当前eip寄存器地址的后8条指令
ub                   // 反汇编当前eip寄存器地址的前8条指令
u main.exe+0x10 L20  // 反汇编main.exe+0x10地址后20条指令
uf lyshark::add      // 反汇编lyshark类的add函数
uf /c main           // 反汇编main函数
ub 000c135d L20      // 查看地址为000c135d指令前的20条指令内容r                    // 显示所有寄存器信息及发生core所在的指令
r eax, edx           // 显示eax,edx寄存器信息
r eax=5, edx=6       // 对寄存器eax赋值为5,edx赋值为6g                    // Go 让程序跑起来
p                    // 单步执行(F10)
p 2                  // 2为步进数目
pc                   // 执行到下一个函数调用处停下
pa 0x7c801b0b        // 执行到7c801b0b地址处停下
t                    // 停止执行!address -summary    // 显示进程的内存统计信息
!address -f:stack    // 查看栈的内存信息
!address 0x77c000    // 查看该地址处的内存属性bl                   // 列出所有断点
bc *                 // 清除所有断点
be *                 // 启用所有断点
bd *                 // 禁用所有断点bc 1 2 5              // 清除1号、2号、5号断点
be 1 2 5              // 启用1号、2号、5号断点
bd 1 2 5              // 禁用1号、2号、5号断点bp main               // 在main函数开头设置一个断点
bp 0x7c801b00         // 在7c801b00地址处放置一个断点
bp main.exe+0x1032    // 在模块MyDll.dll偏移0x1032处放置一个断点
bp @$exentry          // 在进程的入口放置一个断点
bm message_*          // 匹配message_开头的函数,并在这些函数起始处都打上断点

堆栈操作

k                      // 显示当前调用堆栈
kn                     // 带栈编号显示当前调用堆栈
kb                     // 打印出前3个函数参数的当前调用堆栈
kb 5                   // 只显示最上的5层调用堆栈kv                     // 在kb的基础上增加了函数调用约定、FPO等信息
kp                     // 显示每一层函数调用的完整参数,包括参数类型、名字、取值
kd                     // 打印堆栈的地址
kD                     // 从当前esp地址处,向高地址方向搜索符号(注:函数是符号的一种)
dds 02a9ffec           // 从02a9ffec地址处,向高地址方向搜索符号(注:函数是符号的一种)
dds                    // 执行完dds 02a9ffec后,可通过dds命令继续进行搜索.frame                 // 显示当前栈帧
.frame n               // 显示编号为n的栈帧(n为16进制数)
.frame /r n            // 显示编号n的栈帧(n为16进制数) 并显示寄存器变量
.frame /c n            // 设置编号n的栈帧为当前栈帧(n为16进制数)
!uniqstack             // 显示所有线程的调用堆栈
!findstack kernel32 2  // 显示包含kernel32模块(用星号标出)的所有栈的信息
!heap -s               // 显示进程堆的个数
dt _HEAP 00140000      // 选取一个堆的地址,打印该堆的内存结构
!heap -a 00140000      // 选取一个堆的地址,打印该堆的信息,比上面打印内存命令更详细直观

其他命令

dt ntdll!*                   // 显示ntdll里的所有类型信息
dt -rv _TEB
dt -rv _PEB
dt -v _PEB @$PEB
dt _PEB_LDR_DATA
dt _TEB ny LastErrorValue    // 只查看TEB(thread's environment block)结构成员LastErrorValuedt _eprocess
dt _eprocess 0x510!dh 773a0000                 //    显示文件PE头dt ntdll!_peb*               // *是通配符;显示所有peb打头的结构体名称;0:000> dt -rv ntkrnlmp!*Object*  //枚举ntkrnlmp中带"Object"的结构体名称;.attach  PID                  // 附加进程
.detach                       // 结束会话.dump  文件名                  // 转存文件
.opendump                     // 打开文件dt -v ntdll!*                 // 列出ntdll中的全部结构体,导出的函数名也会列出dt ntdll!*file*               // 下面命令将列出ntdll导出的文件操作相关的函数名
dt _FILE_INFORMATION_CLASS    // 查看一个结构定义
dt ntdll!_*                   // 列出ntdll中结构体qd                            // 退出
.restart                      // 重新运行

相关文章:

windbg:常用指令

windbg 调试 参考文档 1、viewing-and-editing-global-variables-in-windbg WinDBG 常用调试命令 加载符号 .sympath // 查看当前符号查找路径 .sympath c:\symbols // 将符号查找路径设为:c:\symbols .sympath c:\symbols // 将c:\symbols添加…...

23. 集合类

集合 1. 概述2. 分类2.1 单列集合(Collection)2.2 双列集合(Map) 单列集合 Collection、List、Set、ArrayList、LinkedList’、Vector、HashSet、TreeSet、LinkedHashSet双列集合 Map、HashTable、HashMap、TreeMap、Properties、…...

OpenAI平台:引领人工智能的创新与应用

在当今迅速发展的技术世界中,OpenAI已成为人工智能(AI)研究和应用的先驱。作为一个致力于确保人工智能的安全和广泛受益的组织,OpenAI通过其平台提供了一系列强大的工具和API,这些工具和API正在重塑我们与技术的互动方…...

redis原理(五)Lua语言

一、介绍: 1、背景: 在 Redis 的 2.6 以上版本中,除了可以使用命令外,还可以使用 Lua 语言操作 Redis。 Redis 命令的计算能力并不算很强大,而使用 Lua 语言则在很大程度上弥补了 Redis 的这个不足。 2、特点&#…...

SOHO外贸怎么建网站?做海洋建站的步骤?

SOHO外贸如何做跨境独立站?搭建外贸自建站的策略? 一位成功的SOHO外贸从业者不仅需要精湛的贸易技能,还需要一个优质的网站来展示产品、与客户互动,并建立强大的在线品牌形象。海洋建站将探讨在SOHO外贸领域如何建立一个成功的网…...

[论文阅读] |RAG评估_Retrieval-Augmented Generation Benchmark

写在前面 检索增强能够有效缓解大模型存在幻觉和知识时效性不足的问题,RAG通常包括文本切分、向量化入库、检索召回和答案生成等基本步骤。近期组里正在探索如何对RAG完整链路进行评估,辅助阶段性优化工作。上周先对评估综述进行了初步的扫描&#xff0…...

【Linux】动态库和静态库——动态库和静态库的打包和使用、gcc编译、拷贝到系统默认的路径、建立软连接

文章目录 动态库和静态库1.静态库和动态库的介绍2.静态库的打包和使用2.1生成静态库2.2使用静态库的三种方式2.2.1gcc编译2.2.2拷贝到系统默认的路径2.2.3建立软连接 3.动态库的打包和使用3.1生成动态库3.2使用动态库3.3解决加载不到动态库的方法 动态库和静态库 1.静态库和动…...

【Redis】Redis有哪些适合的场景

🍎个人博客:个人主页 🏆个人专栏:Redis ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 (1)会话缓存(Session Cache) (2)全页缓存(FPC…...

uniapp上传音频文件到服务器

视频教程地址: 【uniapp录音上传组件,将录音上传到django服务器】 https://www.bilibili.com/video/BV1wi4y1p7FL/?share_sourcecopy_web&vd_sourcee66c0e33402a09ca7ae1f0ed3d5ecf7c uniapp 录制音频文件上传到django服务器保存到服务器 &#xf…...

C#-正则表达式

1.C#功能点: 验证格式:通过正则表达式,我们可以检查一个字符串是否符合特定的格式要求,例如验证邮箱、电话号码、身份证号码等。 查找和提取:我们可以使用正则表达式来查找字符串中符合特定模式的部分,并将…...

【word】论文、报告:①插入图表题注,交叉引用②快速插入图表目录③删改后一键更新

【word】①插入图表题注,②删改后一键更新 写在最前面插入题注交叉引用修改插入题注的文字格式快速插入图表目录 插入题注后有删改,实现编号一键更新 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你…...

Spring Security 的TokenStore三种实现方式

博主介绍:✌专注于前后端领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有需要可以联系作者我哦&…...

微信小程序 图片自适应高度 宽度 完美适配原生或者uniapp

-- - - - 查了一下百度看到网上图片高度自适应的解决方案 基本是靠JS获取图片的宽度进行按比例计算得出图片高度。 不是很符合我的需求/ 于是我脑瓜子一转 想到一种新的解决方案 不用JS计算也能完美解决。 我写了一个组件,直接导入可以使用。 - - - 1.新…...

Go语言基础之反射

1.变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息。值信息:程序运行过程中可动态变化的。 2.反射介绍 反射是指在程序运行期间对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址&#xff…...

MySQL十部曲之六:数据操作语句(DML)

文章目录 前言语法约定DELETEINSERTSELECT查询列表SELECT 选项子句FROMWHEREORDER BYGROUP BYHAVINGWINDOWLIMITFOR SELECT ... INTO连接查询CROSS JOIN和INNER JOINON和USINGOUTER JOINNATURE JOIN 子查询标量子查询使用子查询进行比较带有ANY、IN或SOME的子查询带有ALL的子查…...

Quartus生成烧录到FPGA板载Flash的jic文件

简要说明: Altera的FPGA芯片有两种基本分类,一类是纯FPGA,另一类是FPGASoc(System on chip),也就是FPGAHPS(Hard Processor System,硬核处理器),对应两种Flash烧录方式&a…...

CSS 多色正方形上升

<template><view class="loop cubes"><view class="item cubes"></view> <!-- 方块1 --><view class="item cubes"></view> <!-- 方块2 --><view class="item cubes"></vie…...

《HelloGitHub》第 94 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 …...

uniapp 实现路由拦截,权限或者登录控制

背景&#xff1a; 项目需要判断token&#xff0c;即是否登录&#xff0c;登录之后权限 参考uni-app官方&#xff1a; 为了兼容其他端的跳转权限控制&#xff0c;uni-app并没有用vue router路由&#xff0c;而是内部实现一个类似此功能的钩子&#xff1a;拦截器&#xff0c;由…...

[GXYCTF2019]BabySQli1

单引号闭合&#xff0c;列数为三列&#xff0c;但是没有期待的1 2 3回显&#xff0c;而是显示wrong pass。 尝试报错注入时发现过滤了圆括号&#xff0c;网上搜索似乎也没找到能绕过使用圆括号的方法&#xff0c;那么按以往爆库爆表爆字段的方法似乎无法使用了 在响应报文找到一…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...