WinDbg常用命令系列---线程栈中局部上下文切换.frame
.frame (Set Local Context)
.frame命令指定使用哪个本地上下文(作用域)解释本地变量或显示当前本地上下文。
.frame [/c] [/r] [FrameNumber]
.frame [/c] [/r] = BasePtr [FrameIncrement]
.frame [/c] [/r] = BasePtr StackPtr InstructionPtr
参数:
- /c
将指定的帧设置为当前本地重写上下文。此操作允许用户访问调用堆栈中任何函数的非易失性寄存器。 - /r
显示有关指定本地上下文的寄存器和其他信息。 - FrameNumber
指定需要其本地上下文的帧的数目。如果此参数为零,则该命令指定当前帧。如果省略此参数,则此命令将显示当前本地上下文。 - BasePtr
如果在命令名(.frame)后添加等号(=),则指定用于确定帧的堆栈跟踪的基指针。在基于x86的处理器上,在baseptr(解释为frameincrement)之后添加另一个参数,或在baseptr(解释为instructionptr和stackptr)之后添加两个以上参数。 - FrameIncrement
仅限基于x86的处理器,指定超过基指针的额外帧数。例如,如果基指针0x0012ff00是帧3的地址,则命令.frame 12ff00等效于.frame 3,.frame 12ff00 2等效于.frame 5。 - StackPtr
仅限基于x86的处理器,指定用于确定帧的堆栈跟踪的堆栈指针。如果省略stackptr和instructionptr,调试器将使用esp寄存器指定的堆栈指针和eip寄存器指定的指令指针。 - InstructionPtr
仅限基于x86的处理器,指定用于确定帧的堆栈跟踪的指令指针。如果省略stackptr和instructionptr,调试器将使用esp寄存器指定的堆栈指针和eip寄存器指定的指令指针。
环境:
模式 |
用户模式下,内核模式 |
目标 |
实时、 崩溃转储 |
平台 |
全部 |
应用程序运行时,局部变量的含义取决于程序计数器的位置,因为这些变量的范围仅扩展到在其中定义的函数。如果不使用.frame命令,调试器将使用当前函数(堆栈上的当前帧)的范围作为本地上下文。要更改本地上下文,请使用.frame命令并指定所需的帧号。帧编号是堆栈跟踪中堆栈帧的位置。可以使用k(display stack backtrace)命令或“调用”窗口查看此堆栈跟踪。第一行(当前帧)是帧号0。随后的行表示帧号1、2、3等。 如果将n参数与k命令一起使用,k命令将显示帧号和堆栈跟踪。这些帧编号始终以十六进制形式显示。另一方面,.frame命令将其参数解释为默认基数,除非使用前缀(如x)重写此设置。若要更改默认基数,请使用n(set number base)命令。您可以将本地上下文设置为不同的堆栈帧,以便查看新的本地变量信息。但是,可用的实际变量取决于正在执行的代码。如果发生任何应用程序执行,本地上下文将重置为程序计数器的作用域。如果寄存器上下文发生更改,则本地上下文将重置为顶部堆栈帧。
例如:
0:000> kv
# ChildEBP RetAddr Args to Child
00 009efb40 7772448d ffffffff 00000000 00f9114a ntdll!NtTerminateProcess+0xc (FPO: [2,0,0])
01 009efc18 76e03a22 00000000 77e8f3b0 ffffffff ntdll!RtlExitUserProcess+0xbd (FPO: [Non-Fpo])
02 009efc2c 0f07e619 00000000 009efc88 0f07ee79 KERNEL32!ExitProcessImplementation+0x12 (FPO: [1,0,0])
03 009efc38 0f07ee79 00000000 1554bc36 00f9114a MSVCR120D!__crtExitProcess+0x19 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt\crtw32\startup\crt0dat.c @ 776]
04 009efc88 0f07eea0 00000000 00000000 00000000 MSVCR120D!doexit+0x1a9 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt\crtw32\startup\crt0dat.c @ 678]
05 009efc9c 00f928b6 00000000 c88ea480 00f9114a MSVCR120D!exit+0x10 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt\crtw32\startup\crt0dat.c @ 417]
06 009efce4 00f92a8d 009efd00 76e08484 00bf7000 ConsoleApplication3!__tmainCRTStartup+0x1b6 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c @ 662]
07 009efcec 76e08484 00bf7000 76e08460 84bfe2f0 ConsoleApplication3!mainCRTStartup+0xd (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c @ 466]
08 009efd00 777541c8 00bf7000 975113fe 00000000 KERNEL32!BaseThreadInitThunk+0x24 (FPO: [Non-Fpo])
09 009efd48 77754198 ffffffff 7776f32e 00000000 ntdll!__RtlUserThreadStart+0x2f (FPO: [SEH])
0a 009efd58 00000000 00f9114a 00bf7000 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo])
0:000> .frame 6
06 009efce4 00f92a8d ConsoleApplication3!__tmainCRTStartup+0x1b6 [f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c @ 662]
0:000> dv
lock_free = 0x00000000
fiberid = 0x009f0000
nested = 0n0
WinDbg常用命令系列---线程栈中局部上下文切换.frame的更多相关文章
- WinDbg常用命令系列---线程相关操作~*
~ (Thread Status) 波浪符(~)命令显示指定线程或当前进程中所有线程的状态. ~ Thread 参数: Thread指定要显示的线程.如果省略此参数,将显示所有线程. 环境: 模式 仅 ...
- WinDbg常用命令系列---断点操作b*
ba (Break on Access) ba命令设置处理器断点(通常称为数据断点,不太准确).此断点在访问指定内存时触发. 用户模式下 [~Thread] ba[ID] Access Size [O ...
- WinDbg常用命令系列---!findstack
简介 !findstack扩展查找所有包含指定的符号或模块的堆栈.此命令搜索线程调用堆栈中的特定符号,并显示匹配的线程. 使用形式 !findstack Symbol[DisplayLevel] !f ...
- WinDbg常用命令系列---显示局部变量dv
dv (Display Local Variables) dv命令显示当前作用域中所有局部变量的名称和值. dv [Flags] [Pattern] 参数: Flags显示其他信息.可以包括以下任何区 ...
- WinDbg常用命令系列---检查符号X
x (Examine Symbols) x命令在所有与指定模式匹配的上下文中显示符号. x [Options] Module!Symbol x [Options] * 参数: Options特定符号搜 ...
- WinDbg常用命令系列---内存数据显示和对应符号显示d*s(dds、dps、dqs)
命令dds, dps, dqs显示给定范围内的内存内容.假定该内存是符号表中的一系列地址.相应的符号也会显示出来. dds [Options] [Range] dqs [Options] [Rang ...
- WinDbg常用命令系列---查看线程调用栈命令K*简介
Windbg里的K*命令显示给定线程的堆栈帧以及相关信息,对于我们调试时,进行调用栈回溯有很大的帮助. 一.K*命令使用方式 在不同平台上,K*命令的使用组合如下 User-Mode, x86 Pro ...
- WinDbg常用命令系列---!uniqstack
简介 这个!uniqstack扩展扩展显示的所有线程的堆栈的所有当前进程,不包括显示为具有重复项的堆栈中. 使用形式 !uniqstack [ -b | -v | -p ] [ -n ] 参数 -b将 ...
- WinDbg常用命令系列---单步执行p*
p (Step) p命令执行单个指令或源代码行,并可选地显示所有寄存器和标志的结果值.当子例程调用或中断发生时,它们被视为单个步骤. 用户模式: [~Thread] p[r] [= StartAddr ...
随机推荐
- Docker之网络配置
目的: Docker网络配置 Docker部署SpringCloud项目 Docker网络配置 Docker网络模式介绍 Docker在创建容器时有四种网络模式:bridge/host/conta ...
- python_三目运算
首先确定三目运算的使用条件, if只有两个才能用三目 只有 if:else: 先写个if else的小例子: if push == "lpush": self.conn.l ...
- Codeforces Round #581 (Div. 2)
A:暴力. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm& ...
- ELK学习笔记之配置logstash消费kafka多个topic并分别生成索引
0x00 filebeat配置多个topic filebeat.prospectors: - input_type: log encoding: GB2312 # fields_under_root: ...
- C#类型成员:方法
一.方法 方法的基本结构:返回值 方法名(参数){ 内容 },其中无返回值时用void,有返回值时用返回值类型,参数可以是零到无限个,参数由参数类型和参数名组成. void Method1() { } ...
- C# vb .net实现颜色替换效果滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的颜色替换效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ...
- SessionChange
protected override void OnSessionChange(SessionChangeDescription changeDescription) { System.IO.File ...
- sudo apt-get install libstdc++6
sudo apt-get install libstdc++6 yum install libncurses.so.5 sudo apt-get install libncurses.so.5 su ...
- Nikitosh 和异或(trie树)
题目: #10051. 「一本通 2.3 例 3」Nikitosh 和异或 解析: 首先我们知道一个性质\(x\oplus x=0\) 我们要求\[\bigoplus_{i = l}^ra_i\]的话 ...
- 服务注册发现(一) Consul 简介及 windows版本的安装与部署
Consul是一个用来实现分布式系统的服务发现与配置的开源工具.他主要由多个组成部分: 服务发现:客户端通过Consul提供服务,类似于API,MySQL,或者其他客户端可以使用Consul发现服务的 ...