当前位置: 首页 > 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;那么按以往爆库爆表爆字段的方法似乎无法使用了 在响应报文找到一…...

【架构】Docker实现集群主从缩容【案例4/4】

实现集群主从缩容【4/4】 接上一节&#xff0c;在当前机器为4主4从的架构上&#xff0c;减缩容量为3主3从架构。即实现删除6387和6388. 示意图如下&#xff1a; 第一步&#xff1a;查看集群情况&#xff08;第一次&#xff09; redis-cli --cluster check 127.0.0.1:6387roo…...

【ArcGIS微课1000例】0097:栅格重采样(以数字高程模型dem为例)

Contents 1. 最邻近法(Nearest Neighbor)2. 双线性内插法(Bilinear Interpolation)3. 三次卷积法(Cubic Convolution)4. ArcGIS重采样工具(Resample)5. 注意事项栅格/影像数据进行配准或纠正、投影等几何变换后,像元中心位置通常会发生变化,其在输入栅格中的位置不一…...

【技术分享】Ubuntu 20.04如何更改用户名

产品简介 本文适用于所有RK3568/RK3588平台产品在Ubuntu 20.04系统上如何更改用户名&#xff0c;本文以IDO-EVB3588开发板为例&#xff0c;在ubuntu20.04系统上修改用户名industio为usernew。 IDO-EVB3588开发板是一款基于RK3588平台的产品。该开发板集成了四核Cortex-A76和四…...

LabVIEW振动信号分析

LabVIEW振动信号分析 介绍如何使用LabVIEW软件实现希尔伯特-黄变换&#xff08;Hilbert-Huang Transform, HHT&#xff09;&#xff0c;并将其应用于振动信号分析。HHT是一种用于分析非线性、非平稳信号的强大工具&#xff0c;特别适用于旋转机械等复杂系统的振动分析。开发了…...

清理Docker环境

清理Docker环境&#xff1a;有时&#xff0c;Docker环境可能会出现一些问题&#xff0c;导致网络连接故障。您可以尝试清理Docker环境并重新启动。可以尝试运行以下命令&#xff1a; 复制 docker-compose down docker system prune -a docker-compose up docker-compose up 和…...

oracle等保测评

实战|等保2.0 Oracle数据库测评过程 一、身份鉴别 a) 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换; sysdba是Oracle数据库的最高权限管理员。通常使用sqlplus或PL/SQL 管理软件进行管理,PL/SQL 为第三方管理软件,但S…...

x-cmd pkg | go - Google 开发的开源编程语言

目录 简介首次用户技术特点竞品分析编译型语言解释型语言JavaWebAssebmly 进一步阅读 简介 Go 语言&#xff08;或 Golang&#xff09;是 Google 开发的开源编程语言&#xff0c;诞生于 2006 年。其设计目标是“兼具 Python 等动态语言的开发速度和 C/C 等编译型语言的性能与安…...

32个Java面试必考点-09(下)MySQL调优与最佳实践

详解 MySQL 下面来学习互联网行业使用最为广泛的关系型数据库 MySQL&#xff0c;它的知识点结构图如下所示。 常用 SQL 语句 对于手写常用 SQL 语句&#xff0c;没有什么特殊的技巧&#xff0c;根据所列的语句类型多做一些练习就好。 数据类型 要知道 MySQL 都提供哪些基本的…...

优思学院|精益管理如何判定哪些活动是增值或非增值?

“时间就是金钱”——这句老话我们都耳熟能详。但在工作中&#xff0c;我们真正从事的、对组织增加价值的活动有多少呢&#xff1f;我们常常认为自己的每一项任务都是维持运营的关键。然而&#xff0c;当我们从精益管理的视角进行分析&#xff0c;可能会惊讶地发现&#xff0c;…...

详解操作系统各章大题汇总(死锁资源分配+银行家+进程的PV操作+实时调度+逻辑地址->物理地址+页面置换算法+磁盘调度算法)

文章目录 第三章&#xff1a;死锁资源分配图例一例二 第三章&#xff1a;银行家算法第四章&#xff1a;进程的同步与互斥做题步骤PV操作的代码小心容易和读者写者混 1.交通问题&#xff08;类似读者写者&#xff09;分析代码 2.缓冲区问题&#xff08;第二个缓冲区是复制缓冲区…...