WinDBG的 uf 命令可以把二进制进行反汇编并显示汇编代码,帮助在没有源代码的情况下分析函数。 举个例子,已知Windows 下的扫雷程序(winmine.exe) 有个函数叫winmine!StartGame (通过 x winmine!*命令) ,可以使用uf winmine!StartGame 命令显示该函数的汇编码:
0:000> uf winmine!StartGame
winmine!StartGame:
0100367a a1ac560001 mov eax,dword ptr [winmine!Preferences+0xc (010056ac)]
0100367f 8b0da8560001 mov ecx,dword ptr [winmine!Preferences+0x8 (010056a8)]
01003685 53 push ebx
01003686 56 push esi
01003687 57 push edi
01003688 33ff xor edi,edi
0100368a 3b0534530001 cmp eax,dword ptr [winmine!xBoxMac (01005334)]
01003690 893d64510001 mov dword ptr [winmine!fTimer (01005164)],edi
01003696 750c jne winmine!StartGame+0x2a (010036a4)
winmine!StartGame+0x1e:
01003698 3b0d38530001 cmp ecx,dword ptr [winmine!yBoxMac (01005338)]
0100369e 7504 jne winmine!StartGame+0x2a (010036a4)
winmine!StartGame+0x26:
010036a0 6a04 push 4
010036a2 eb02 jmp winmine!StartGame+0x2c (010036a6)
winmine!StartGame+0x2a:
010036a4 6a06 push 6
winmine!StartGame+0x2c:
010036a6 5b pop ebx
010036a7 a334530001 mov dword ptr [winmine!xBoxMac (01005334)],eax
010036ac 890d38530001 mov dword ptr [winmine!yBoxMac (01005338)],ecx
010036b2 e81ef8ffff call winmine!ClearField (01002ed5)
010036b7 a1a4560001 mov eax,dword ptr [winmine!Preferences+0x4 (010056a4)]
010036bc 893d60510001 mov dword ptr [winmine!iButtonCur (01005160)],edi
010036c2 a330530001 mov dword ptr [winmine!cBombStart (01005330)],eax
winmine!StartGame+0x4d:
010036c7 ff3534530001 push dword ptr [winmine!xBoxMac (01005334)]
010036cd e86e020000 call winmine!Rnd (01003940)
010036d2 ff3538530001 push dword ptr [winmine!yBoxMac (01005338)]
010036d8 8bf0 mov esi,eax
010036da 46 inc esi
010036db e860020000 call winmine!Rnd (01003940)
010036e0 40 inc eax
010036e1 8bc8 mov ecx,eax
010036e3 c1e105 shl ecx,5
010036e6 f684314053000180 test byte ptr winmine!rgBlk (01005340)[ecx+esi],80h
010036ee 75d7 jne winmine!StartGame+0x4d (010036c7)
winmine!StartGame+0x76:
010036f0 c1e005 shl eax,5
010036f3 8d843040530001 lea eax,winmine!rgBlk (01005340)[eax+esi]
010036fa 800880 or byte ptr [eax],80h
010036fd ff0d30530001 dec dword ptr [winmine!cBombStart (01005330)]
01003703 75c2 jne winmine!StartGame+0x4d (010036c7)
winmine!StartGame+0x8b:
01003705 8b0d38530001 mov ecx,dword ptr [winmine!yBoxMac (01005338)]
0100370b 0faf0d34530001 imul ecx,dword ptr [winmine!xBoxMac (01005334)]
01003712 a1a4560001 mov eax,dword ptr [winmine!Preferences+0x4 (010056a4)]
01003717 2bc8 sub ecx,eax
01003719 57 push edi
0100371a 893d9c570001 mov dword ptr [winmine!cSec (0100579c)],edi
01003720 a330530001 mov dword ptr [winmine!cBombStart (01005330)],eax
01003725 a394510001 mov dword ptr [winmine!cBombLeft (01005194)],eax
0100372a 893da4570001 mov dword ptr [winmine!cBoxVisit (010057a4)],edi
01003730 890da0570001 mov dword ptr [winmine!cBoxVisitMac (010057a0)],ecx
01003736 c7050050000101000000 mov dword ptr [winmine!fStatus (01005000)],1
01003740 e825fdffff call winmine!UpdateBombCount (0100346a)
01003745 53 push ebx
01003746 e805e2ffff call winmine!AdjustWindow (01001950)
0100374b 5f pop edi
0100374c 5e pop esi
0100374d 5b pop ebx
0100374e c3 ret
分享到:
相关推荐
### Windbg调试命令详解 Windbg是一款功能强大的调试工具,被广泛应用于Windows系统下的软件开发、故障排查等场景。本文将详细介绍Windbg中的一些常用调试命令及其应用场景。 #### 1. 进程管理命令 - **~\*s**:...
在HSDB会话中,`universe`命令显示了堆的参数和状态。这里的堆被划分为多个代,如新生代(Gen 0 和 Gen 1)和永久代(perm)。每个代都有其eden、from、to空间,分别对应于对象分配、晋升和未使用的区域。`scanoops`...
本文将深入解析Windbg的一些关键命令及其应用,帮助你掌握这款神器的用法。 1. **基本命令** - `.help` 或 `?`: 查看所有可用的命令和简短的描述。 - `.version`: 显示Windbg的版本信息。 - `.echo <message>`: ...
clrstack`:显示托管堆栈跟踪,对于理解.NET代码执行路径非常有用。 - `!syncblk`:显示同步块索引表,用于分析线程同步问题。 3. **使用批处理脚本**: - `start.bat` 和 `stop.bat` 文件通常用于自动化Windbg的...
传统的debug工具对于初学者来说可能不够直观,而使用Windbg结合MASM(Microsoft Assembler)则能够提供一种类似于VC6调试的体验,让汇编代码的调试变得更加高效且易于理解。 #### 一、为什么选择Windbg与MASM 1. *...
- 破坏窗口(Disassembly):显示目标程序的汇编代码。 - 跟踪窗口(Call Stack):显示函数调用层次结构。 3. **Windbg基本操作** - 设置断点:`bp`命令,例如`bp <address>`或`bp !function>`。 - 单步执行:...
#### 二、通用WinDBG命令(显示版本、清屏等) 1. **version**:显示调试器及加载扩展DLL的版本信息。 - 变体/参数:无 - 描述:该命令用于检查当前调试环境中使用的工具版本。 2. **vercommand**:显示启动调试...
这款"Windbg命令高亮显示插件"是为了提升用户在使用Windbg时的体验,通过高亮显示命令,使得调试过程更加直观和高效。下面我们将深入探讨这款插件的功能、使用方法以及与Windbg的结合。 首先,高亮显示是编程和调试...
- **调试控制**:当命令提示符显示`*BUSY*`时,即使命令输入框可以接受输入,但输入的命令也不会被立即执行,直到Windbg处于空闲状态。可以通过Ctrl+Break来终止一个长时间未完成的命令。 #### 启动调试 - `windbg...
- `u`:反汇编代码。 - `dt`:显示类型结构。 - `bp`/`bl`:设置和列出断点。 3. **windbg+sos帮助文档.pdf:** SOS是.NET Framework的调试扩展,与Windbg结合使用可以调试托管代码。SOS的一些重要命令包括: ...
如果pdb文件可用,WinDbg将显示函数名和源代码行号;如果没有,可能需要手动搜索map文件以获取更多信息。 配合代码示例,你可以通过“!sym noisy”开启调试符号服务的详细输出,以帮助找到正确的pdb路径。在分析...
《WinDBG调试技巧详解》 WinDBG,全称Debugging Tools for Windows,是一款强大的调试工具,尤其在处理底层系统和驱动程序的调试方面表现出色。它根据不同的CPU指令架构提供了x86、AMD64和IA64三个版本。WinDBG不仅...
反汇编命令 (U/u, ub, uf, ur, ux) - **功能**:反汇编代码。 - **使用场景**:查看汇编语言级别的代码,有助于深入理解程序的行为。 - **相关章节**:未指定 ##### L. 显示符号命令 (X/x) - **功能**:显示调试...
《Windbg详解》一书可能涵盖了更复杂的使用技巧,如使用风bg进行崩溃dump分析、调试驱动程序、跟踪内存泄漏,以及如何结合其他工具(如SOS扩展)进行高级调试。此外,你可能还会学习到如何利用Windbg进行性能分析,...
1. **命令行操作**:WinDbg的强大在于其丰富的命令集,如`kb`用于查看调用堆栈,`dv`用于显示变量值,`lm`列出模块信息,`!analyze -v`用于详细分析故障信息。 2. **脚本与扩展**:WinDbg支持脚本编写,可以自定义...
内建命令是WinDbg自带的基本调试指令,如`k`(显示堆栈)、`!analyze -v`(进行详细的崩溃分析)等;扩展命令则来自KD扩展包,如`!dlls`(列出加载的DLLs)和`!threads`(显示线程信息)。 2. **内建命令** - `g`:...
- `k`: 显示当前调用堆栈,包括函数地址、返回地址和参数。 - `p` 和 `pp`: 单步执行(Step Over)和单步进入(Step Into)指令,帮助理解代码流程。 2. **内存查看与修改** - `d` 或 `da`: 显示内存区域的内容...
对于Windbg这样的调试环境,高亮显示可以显著提高阅读和理解汇编代码或内存转储的能力,尤其是在处理复杂的调试场景时。 安装和使用这个Windbg高亮插件可能需要以下步骤: 1. 下载并解压文件,找到对应的DLL文件。...
2. **命令语法**:Windbg命令通常分为命令行模式和快捷键模式,如`g`代表继续执行,`k`显示调用堆栈,`p`执行下一条指令等。 3. **数据查看**:`dv`、`dt`、`dd`等命令用于查看变量、结构体和内存区域的内容,帮助...
16. 源信息:命令如l可用于显示源代码。 17. 主扩展:这可能是指WinDBG的主要扩展模块。 18. 参数描述:用于解释命令行参数的使用和含义。 在使用WinDBG时,可以通过命令行或图形用户界面(GUI)进行操作。命令行...