1.ln
ln 命令显示给定地址处的或者最近的符号。
ln表示list near,ln命令将尽可能地给出与特定地址相关的符号,如果没有符号能够精确地与这个地址匹配,那么调试器将通过指针算法对靠近这地址的符号进行运逄,
并返回运算结果符号
0:000> ln 01012475
(01012475) calc!WinMainCRTStartup | (0101263c) calc!__CxxFrameHandler
Exact matches:
calc!WinMainCRTStartup = <no type information>
0:000> ln 01012475+1
(01012475) calc!WinMainCRTStartup+0x1 | (0101263c) calc!__CxxFrameHandler
我们发现,第一个显示为Exact matches:表示精确匹配了一个地址,如果不是精确匹配,我们要小心,是否模块进行了优化,在优化后,一个函数,可能被拆分为多个部分
分别位于不同的地址,经过优化的映像可以通过lm查看:会有perf标识
当你在查看某部分数据,却不知道这部分数据所表示的内容时,这个命名能带来极大的帮助
2.伪寄存器
对于那些偶尔使用调试器的用户是很难记得所有平台的指令指针寄存器名字(或其他的名字),为了克服这个问题,调试器的开发团队引入了各种伪寄存器,由调试器把这些伪寄存器对应到不同的硬件架构上,形式为$name,与标准的寄存器一样,如果要在表达式中使用伪寄存器,那么必须使用转义字符@
$exentry
当前进程的入口地址
0:002> r $exentry
$exentry=01012475
一般可以直接在这下断点,
这个就对应PE文件中的ImageBase+AddressOfEntryPoint(_IMAGE_OPTIONAL_HEADER)
$ip
指令指针寄存器
在X86架构上,$ip = eip
在x64架构上,$ip = rip
在Itanium架构上, $ip = iip
0:000> r @$ip
$ip=7c92120e
0:000> r eip
eip=7c92120e
注意到下面显示的分别是$ip,eip,虽然它们在X86下是同一个东东.
$ra
当前函数的返回地址
0:000> r $ra
$ra=7c95e612
0:000> kb
ChildEBP RetAddr Args to Child
0012fb1c 7c95e612 7ffdd000 7ffde000 00000000 ntdll!DbgBreakPoint
0012fc94 7c94108f 0012fd30 7c920000 0012fce0 ntdll!LdrpInitializeProcess+0xffa
0012fd1c 7c92e437 0012fd30 7c920000 00000000 ntdll!_LdrpInitialize+0x183
00000000 00000000 00000000 00000000 00000000 ntdll!KiUserApcDispatcher+0x7
其实也是对应当前线程,如果要看所有线程的当前函数的返回地址:
0:000> ~* r $ra
$ra=77d191be
$ra=7c92df2c
$ra=7c92df3c
$ra=7c970010
$retreg
主要的值寄存器,在函数调用返回后,函数的结果将放在这个寄存器中,根据处理器架构的不同,$retreg的值分别为
在x86架构上,$retreg = eax
在x64架构上,$retreg = rax
在Itanium架构上,$retreg = ret0
0:000>r$retreg
- $retreg=00251eb4
- 0:000>reax
- eax=00251eb4
0:000> r $retreg
$retreg=00251eb4
0:000> r eax
eax=00251eb4
$csp
当前的栈指针,根据处理器架构的不同,$csp的值分别为
在x86架构上,$csp = esp
在x64架构上,$csp = rsp
在Itanium架构上,$csp= bsp
0:000>r$csp
- $csp=0012fb24
- 0:000>resp
- esp=0012fb24
0:000> r $csp
$csp=0012fb24
0:000> r esp
esp=0012fb24
$tpid
当前进程的标识(PID)
0:000>r$tpid
- $tpid=000013f4
0:000> r $tpid
$tpid=000013f4
$tid
当前线程的标识(TID0
0:000>r$tid
- $tid=000014a0
0:000> r $tid
$tid=000014a0
分享到:
相关推荐
windbg调试命令 很详细,很适合windbg初学者。
windbg调试命令大全 Windbg是在windows平台下,强大的用户态和内核态调试工具。相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能,却比VS更为强大。它的...
Windbg调试命令详解 Windbg调试命令详解 Windbg调试命令详解 Windbg调试命令详解 Windbg调试命令详解 Windbg调试命令详解
Windbg 调试命令(内核+用户态程序)
解决win10下windbg无法显示寄存器的BUG,老外写了一个补丁的扩展。下载编译好的wingdbg.dll,放windbg相同目录下,执行!wingdbg.regfix,重新打开寄存器窗口就OK了。
作者有10多年编程,调试经验,详解关于Windows 平台下程序崩溃的Windbg调试方法及技巧;附带工具介绍 适合于分析C++等语言, .Net 平台等快速入门及提高
使用windbg调试windows crash 产生的dmp文件
windbg 调试器扩展。扩展后可以给页面下调试断点! windbg 调试器扩展。扩展后可以给页面下调试断点!
浅析 WinDBG 调试器的使用.pdf
WINDBG调试介绍 方式
当学习windows驱动开发的入门者,经常使用windbg调试,进线程在驱动调试中占有很大的比重,初学者阅读这本pdf绝对是有帮助的!
自己搜集的windbg常用命令列表,希望对大家有用。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
WinDBG调试技巧.ppt 基础介绍,还是可以看看的
windbg调试PPT,来自张同学,很好的东西
WinDbg调试程序崩溃 WinDbg调试程序崩溃
windbg命令,windbg命令,windbg命令
特别对于驱动开发者使用的WinDbg和KD这两个内核调试器(CDB和NTSD是用户态调试器)。本教程的目标是给予一个已经有其他调试工具使用经验的开发者足够信息,使其能通过参考WINDOWS调试工具的帮助文件进行内核调试。...
windbg调试工具 , Windows开发工具, 无须多说。
适用于 Windows 11 版本 WDK中windbg调试插件,支持vs2019,微软官方原版下载WDK中提取