[转载]windbg使用 z

Windows调试与开发第一部分 - 使用WinDBG进行高效调试 调试是软件开发过程中不可或缺的一部分。通过调试工具,开发人员可以识别和解决应用程序中的错误和问题。在Windows平台上,一款常用且强大的调试工具是WinDBG。本文将介绍如何使用WinDBG进行高效的Windows应用程序调试,并提供相应的源代码示例。 阅读详情

   windbg是微软开发的免费源码级调试工具。windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。

.hh keyword
会显示关于keyword的详细命令。

windbg可以用于如下三种调试:
1. 远程调试:你可以从机器A上调试在机器B上执行的程序。具体步骤如下:
    在机器B上启动一个调试窗口(Debug Session)。你可以直接在windbg下运行一个程序或者将windbg附加(Attach)到一个进程。
    在机器B的windbg命令窗口上启动一个远程调试接口(remote):
    .server npipe:pipe=PIPE_NAME
    PIPE_NAME是该接口的名字。

    在机器A上运行:
    windbg –remote npipe:server=SERVER_NAME,pipe=PIPE_NAME
    SERVER_NAME是机器B的名字。

2. Dump文件调试:如果在你的客户的机器上出现问题,你可能不能使用远程调试来解决问题。你可以要求你的用户将windbg附加到出现问题的进程上,然后在命令窗口中输入:
    .dump /ma File Name
    创建一个Dump文件。在得到Dump文件后,使用如下的命令来打开它:
    windbg –z DUMP_FILE_NAME

3. 本地进程调试:你可以在windbg下直接运行一个程序:
    windbg “path to executable” arguments    
        也可以将windbg附加到一个正在运行的程序:
       windbg –p “process id”
    windbg –pn “process name”

        注意有一种非侵入(Noninvasive)模式可以用来检查一个进程的状态并不进程的执行。当然在这种模式下无法控制被调试程序的执行。这种模式也可以用于查看一个已经在Debugger控制下运行的进程。具体命令如下:
       windbg –pv –p “process id”
    windbg –pv –pn “process name”

调试多个进程和线程
    如果你想控制一个进程以及它的子进程的执行,在windbg的命令行上加上-o选项。windbg中还有一个新的命令.childdbg 可以用来控制子进程的调试。如果你同时调试几个进程,可以使用 | 命令来显示并切换到不同的进程。
在同一个进程中可能有多个线程。~命令可以用来显示和切换线程。
   
调试前的必备工作
在开始调试前首先要做的工作是设置好符号(Symbols)路径。没有符号,你看到的调用堆栈基本上毫无意义。Microsoft的操作系统符号文件(PDB)是对外公开的。另外请注意在编译你自己的程序选择生成PDB文件的选项。如果设置好符号路径后,调用堆栈看起来还是不对。可以使用lm, !sym noisy, !reload 等命令来验证符号路径是否正确。

windbg也支持源码级的调试。在开始源码调试前,你需要用.srcpath设置源代码路径。如果你是在生成所执行代码的机器上进行调试,符号文件中的源码路径会指向正确的位置,所以不需要设置源代码路径。如果所执行代码是在另一台机器上生成的,你可以将所用的源码拷贝(保持原有的目录结构)的一个可以访问的文件夹(可以是网络路径)并将源代码路径设为该文件夹的路径。注意如果是远程调试,你需要使用.lsrcpath来设置源码路径。

静态命令:
显示调用堆栈:在连接到一个调试窗口后,首先要知道的就是程序当前的执行情况k* 命令显示当前线程的堆栈。~*kb会显示所有线程的调用堆栈。如果堆栈太长,windbg只会显示堆栈的一部分。.kframes可以用来设置缺省显示框架数。

显示局部变量:接下来要做通常是用dv显示局部变量的信息。CTRL+ALT+V可以切换到更详细的显示模式。关于dv要注意的是在优化过的代码中dv的输出极有可能是不准确的。这时后你能做的就是阅读汇编代码来发现你感兴趣的值是否存储在寄存器中或堆栈上。有时后当前的框架(Frame)上可能找不到你想知道的数据。如果该数据是作为参数传到当前的方法中的,可以读一读上一个或几个框架的汇编代码,有可能该数据还在堆栈的某个地址上。静态变量是储存在固定地址中的,所以找出静态变量的值较为容易。.Frame(或者在调用堆栈窗口中双击)可以用来切换当前的框架。注意dv命令显示的是当前框架的内容。你也可在watch窗口中观察局部变量的值。

显示类和链表: dt可以显示数据结构。比如dt PEB 会显示操作系统进程结构。在后面跟上一个进程结构的地址会显示该结构的详细信息:dt PEB 7ffdf000。

Dl命令可以显示一些特定的链表结构。
显示当前线程的错误值:!gle会显示当前线程的上一个错误值和状态值。!error命令可以解码HRESULT。
搜索或修改内存:使用s 命令来搜索字节,字或双字,QWORD或字符串。使用e命令来修改内存。
显示当前线程,进程和模块信息:!teb显示当前线程的环境信息。最常见的用途是查看当前线程堆栈的起始地址,然后在堆栈中搜索值。!peb显示当前进程的环境信息,比如执行文件的路径等等。lm显示进程中加载的模块信息。
显示寄存器的值:r命令可以显示和修改寄存器的值。如果要在表达式中使用寄存器的值,在寄存器名前加@符号(比如@eax)。
显示最相近的符号:ln Address。如果你有一个C++对象的指针,可以用来ln来查看该对象类型。
查找符号:x命令可以用来查找全局变量的地址或过程的地址。x命令支持匹配符号。x kernel32!*显示Kernel32.dll中的所有可见变量,数据结构和过程。
查看lock:!locks显示各线程的锁资源使用情况。对调试死锁很有用。
查看handle:!handle显示句柄信息。如果一段代码导致句柄泄漏,你只需要在代码执行前后使用!handle命令并比较两次输出的区别。有一个命令!htrace对调试与句柄有关的Bug非常有用。在开始调试前输入:
    !htrace –enable
    然后在调试过程中使用!htrace handle_value 来显示所有与该句柄有关的调用堆栈。
显示汇编代码:u。

程序执行控制命令:
设置代码断点:bp/bu/bm 可以用来设置代码断点。你可以指定断点被跳过的次数。假设一段代码KERNEL32!SetLastError在运行很多次后会出错,你可以设置如下断点:

    bp KERNEL32!SetLastError 0x100.

在出错后使用bl 来显示断点信息:

0 e 77e7a3b0     004f (0100) 0:*** KERNEL32!SetLastError

重新启动调试(.restart命令)并设置如下的断点:

bp Kernel32!SetLastError 0x100-0x4f

Debugger会停在出错前最后一次调用该过程的地方。

你可以指定断点被激活时Debugger应当执行的命令串。在该命令串中使用J命令可以用来设置条件断点:

bp `mysource.cpp:143` "j (poi(MyVar)”0n20) ''; 'g' "

上面的断点只在MyVar的值大于32时被激活(g命令)

条件断点的用途极为广泛。你可以指定一个断点只在特殊的情况下被激活,比如传入的参数满足一定的条件,调用者是某个特殊的过程,某个全局变量被设为特殊的值等等。
设置内存断点:ba可以用来设置内存断点。调试过程中一个常见的问题是跟踪某些数据的变化。如下的断点:
ba w4 0x40000000 "kb; g"

可以打印出所有修改0x40000000的调用堆栈。

控制程序执行:p, pa,t, ta等命令可以用来控制程序的执行。
控制异常和事件处理:Debugger的缺省设置是跳过首次异常(first chance expcetion),在二次异常(second chance exception)时中断程序的执行。sx命令显示Debugger的设置。sxe和sxd可以改变Debugger的设置。
    sxe clr
可以控制Debugger在托管异常发生时中断程序的执行。常用的Debugger事件有:
    av    访问异常
    eh    C++异常
    clr   托管异常
    ld    模块加载
-c 选项可以用来指定在事件发生时执行的调试命令。
windbg命令可见帮忙或者( software.rkuster.com/windbg/cmd.htm)

<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
Windbg使用指南:深入了解编程调试工具 本文将为您详细介绍Windbg的使用方法和技巧,并提供相应的源代码示例,帮助您更好地理解和应用这个工具。本文将为您详细介绍Windbg的使用方法和技巧,并提供相应的源代码示例,帮助您更好地理解和应用这个工具。在Windbg界面中,选择"File" -> “Open Executable”,然后选择您要调试的应用程序的可执行文件。在Windbg界面中,选择"File" -> “Open Executable”,然后选择您要调试的应用程序的可执行文件。首先,您需要从微软官网下载Windbg并进行安装。 阅读详情

相关推荐

Windbg汉化版:提升调试效率的中文界面工具包

本文还有配套的精品资源,点击获取 简介:Windbg汉化版是一个中文语言包,为使用Windows调试工具Windbg的用户提供了中文界面,使得进行系统级调试更直观易懂。Windbg作为微软的强大多功能调试器,常用于驱动程序开发、系统崩溃分析及性能优化等领域。本汉化包包括了内存查看、堆栈跟踪、线程分析、模块管理等工具,使开发者和系统管理员能够更有效地定位和解决问题。汉化步骤简...

weixin_35592186的博客 4966

windbg-应用层实时调试

windbg调试

卑鄙的我 1058

Windbg中文调试手册

windbg工具的中文调试手册

[转载]使用windbg来调试程序

4wk什么是WinDBG?   WinDbg是微软开发的免费源码级调试工具。Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。由于大部分程序员不需要做Kernel模式调试, 我在这篇文章中不会介绍Kernel模式调试。Kernel模式调试对学习Windows核心极有帮助。如果你对此感兴趣,可以阅读Inside Windows 2000和

白日梦 3480

中国裁判文书网案例批量爬取

本文介绍了某法院网站数据采集的技术研究过程,主要包含JS逆向分析和数据解密方法。通过开发者工具分析发现页面数据经过加密处理,重点研究了ciphertext等加密参数的生成逻辑。文章详细记录了定位加密函数、扣取加密代码、解密数据处理的全流程,并验证了解密方法的有效性。研究过程中强调了技术使用的法律边界,明确声明仅用于合法技术研究,禁止任何非法数据爬取行为。最终实现了加密数据的成功解密,并解释了各请求参数的作用,为后续数据清洗和存储奠定了基础。

2303_80825459的博客 817

MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据

1. 概述 MAX31855为热电偶至数字输出转换器,内置14位模/数转换器(ADC)。器件带有冷端补偿检测和修正、数字控制器、SPI兼容接口,以及相关的控制逻辑,在温度控制器、过程控制或监测系统中设计用于配合外部微控制器(μC)工作。提供多个版本的器件,每个版本针对特定的热电偶类型(K、J、N、T或E型)进行优化和调整。热电偶类型以器件型号后缀表示(例如MAX31855K)。 器件输出14位...

睿思派克 1万+

[Z] Windbg以及vs debug使用

Windbg 一篇中国人写的质量非常高的Windbg文章:篇中国人写的质量非常高的Windbg文章: http://www.yiiyee.cn/Blog/windbg/ code project上的Windbg教程,非常科普: http://www.codeproject.com/Articles/6084/Windows-Debuggers-Part-A-WinDbg-Tuto...

weixin_30755709的博客 106

零基础玩转NILM:用nilmtk提取UKDALE电器数据的保姆级教程

本文为零基础用户提供了一份详细的NILM入门指南,重点讲解如何使用nilmtk工具包从UKDALE数据集中提取电器级用电数据。教程涵盖环境搭建、核心概念解析、数据提取实战及常见问题排查,帮助读者快速掌握非侵入式负荷监测的数据预处理关键步骤。

rgv234567的博客 499

windbg通过网络启动进行内核调试

调试环境搭建 用网线把目标机器和主机直连 ,并且手动为它们的有线网卡配制IP地址,且主机和目标机器IP地址必须ipv4格式。 要求:被调试的目标机器必须是win8或是Windows Server 2012及以上系统(win8的system32目录下有个kdnet.dll,正是这个库支持的网络调试) 目标机器必须网卡支持才能进行网络内核调试,查询是否支持的方法 打开设备管理器,找着网络适配器,找着...

CLL的博客 3344

CATIA V5新手必看:从零开始的界面导航与基础操作指南(附常见问题解决)

本文为CATIA V5新手提供全面的界面导航与基础操作指南,涵盖核心工作区解析、文件管理规范、视图操作秘籍及常见问题解决方案。通过详细的步骤说明和实用技巧,帮助用户快速掌握这一工业设计标杆软件,特别适合从SolidWorks、AutoCAD等软件过渡的用户。

b9c0d的博客 533

C#实践项目1

需求: 在CAD内实现两个坐标系的转换。 转换方式为文件内的所有图形从一个坐标系下的坐标,转换到另一个坐标系下的坐标。 进行坐标转换后,仅仅是坐标发生改变,图层、样式等等不会发生变化。

weixin_51182789的博客 5328

windbg调试入门

windbg调试入门 转载:http://www.cnblogs.com/kekec/archive/2012/12/02/2798020.html 使用前首先设置符号表,菜单File=>symbol File Path。 如设置为: srv*C:\Program Files\Debugging Tools for Windows (x86)\sym*http://msdl.

blacet的专栏 1546

硬件学习手册【总目录】

欢迎大家来到《硬件学习手册》,专栏主要包括 《硬件经验手册》《电子元器件器件手册》《PCB手册》《CPU手册》《元器件选型手册》五个分册。在开始专栏的更新前,博主先列出专栏的大纲,以供大家参考。大家直接点击大纲中的蓝色标题即可轻松传送。

fydar的博客 5859

WinDbg查看函数参数(zz)

WinDbg查看函数参数 //z 2012-08-16 16:22:33 IS2120@csdn.T3953604742[T6,L256,R11,V328] 在使用Windbg给一个函数下断点后,函数被中断时,我们经常需要查看函数的参数是什么。通常函数被中断的时机发生在,参数已经被压栈了,执行 call指令(当前EIP被压栈,然后EIP被填充为被调用函数的地址)。此时函数参数...

482

AI OS与LLM as OS:人工智能操作系统的崛起

近年来,随着大语言模型(Large Language Model, LLM)技术的突飞猛进,人工智能领域掀起了新的革命浪潮。以ChatGPT、GPT-4等为代表的LLM模型展现出了惊人的自然语言理解和生成能力,使得人机交互前所未有地拟人化、情境化。在此背景下,业界开始探索将LLM作为操作系统(Operating System, OS)的可能性,由此催生出"AI OS"和"LLM as OS"的概念。本文将深入解读这两个前沿概念,分析其内涵、技术原理、应用前景及面临的挑战。

AI天才研究院 996

使用Simulink对氢燃料电池与锂电池的混合储能系统进行建模

本文介绍了基于Simulink的氢燃料电池与锂电池混合储能系统建模与协同控制方法。系统通过氢燃料电池提供稳定能源,锂电池实现快速响应,结合DC-DC变换器和负载管理器实现动态调控。详细阐述了从模型创建、关键模块配置到控制器设计的完整流程,重点说明了功率分配算法和充放电控制策略的实现。通过仿真分析验证了系统在不同负载条件下的性能表现,包括响应速度、工作效率和稳定性等指标。该方案为新能源混合储能系统的设计与优化提供了实用指导,有助于提升系统可靠性和延长电池寿命。

amy_mhd的博客 315

WinDbg配置和使用基础

WinDbg配置和使用基础 WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。 1. WinDbg介绍: Debugging Tools and Symbols: Getting Started http://www.microsoft.com/whd...

weixin_34119545的博客 144

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

设置_NT_SYMBOL_PATH(windbg)

Use the Microsoft Symbol Server to obtain debug symbol files //z 2011-09-04 16:52:44@is2120.优快云 转载请注明出处 debug tools for windows,windbg

IS2120 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

WinDbg / SOS Cheat Sheet (zz)

WinDbg / SOS Cheat Sheet //z 2012-08-30 13:54:57 IS2120@csdn.T2778344714[T12,L281,R9,V136] Here are the WinDbg / SOS commands I talked about at Code Camp NY. These are the basic commands...

121

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Windbg符号设置

主机 WINDBG 快捷方式 设置 -b -k com:pipe,port=\\.\pipe\com_1,baud=115200,reconnect -y 快捷方式全部BAT文件: start "" windbg_cn.exe -b -k com:pipe,port=\\.\pipe\com_1,baud=115200,reconne...

weixin_30820151的博客 132

Windbg分析DMP文件

1、提取Dump格式文件   有两种方式:   第一种,程序崩溃时,启动任务管理器,选择崩溃的*.exe进程,右键选择创建转储文件,通过 开始—运行—输入%temp%--确定--在打开Temp窗口中即可找到*.dmp文件。   第二种,通过windbg生成dump 文件。   步骤:   1) 打开Windbg并将之Attach 到crash的程序进程...

weixin_30341735的博客 635

windbg常用断点 (zz)

windbg常用断点 //z 2012-08-16 16:43:36 IS2120@csdn.T3181799596[T8,L144,R4,V335] 拦截窗口: bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 ...

175

WinDbg关联dump文件

Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Applications\windbg.exe] [HKEY_CLASSES_ROOT\Applications\windbg.exe\shell] [HKEY_CLASSES_ROOT\Applications\windbg.exe\shell\op...

afdd28617的博客 87

Win10双机调试(Windbg+VMware+Win10LTSC)

0x00 前期准备: 主机安装Windbg 主机安装VMware 在VMware中安装Win10LTSC并且激活 主机配置符号文件相关的环境变量: 0x01 虚拟系统配置: 在虚拟系统设置的硬件一栏,删除打印机之后添加串口(打印机会占用串口1): 配置串口: 0x02 修改虚拟系统启动选项: 在虚拟系统中以管理员身份启动powershell,执行 b...

aigo10000的博客 1904

Windbg中使用查找内存并设置访问断点

在windbg中通过s 命令在内存中查找字符串或者关键字节码信息 0:005> s -u 00c00000 L1000000 "你好 20:15 2012/6/620:15 2012/6/6" 01960d28 4f60 597d 0020 0032 0030 003a 0031 0035 `O}Y .2.0.:.1.5. 查看内存01960d28 0196...

weixin_30355437的博客 262
上一篇: 比较有用的kernel小代码,备忘, 主要是地址转换的函数部分 z
下一篇: [转载]总结windows下堆溢出的三种利用方式 z
KataDoc360
博客等级 码龄18年 65粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值