总目录
1. WinDbg概述
2. WinDbg主要功能
3. WinDbg程序调试示例
4. CPU寄存器及指令系统
5. CPU保护模式概述
6. 汇编语言不等于CPU指令
7. 用WinDbg观察托管程序架构
8. Windows PE/COFF文件格式简述
9. 让WinDbg自动打开DotNet Runtime源程序
10. WinDbg综合实战
前言
上一篇《2. WinDbg主要功能》中,我们通过对notepad.exe及一个自编C#反汇编的分析,让大家初步认识了WinDbg的部分功能,尤其分析了托管代码的值类型与引用类型在CPU级别的实现。
本篇,我们将使用一个全新的C#示例,继续介绍几个分析C#程序经常会用到的WinDbg命令,如要包括:
- r:显示或修改cpu寄存器
- dg:显示cpu段描述符
- wt:函数调用追踪
- !clrstack:托管栈追踪
- 条件断点
本文重点是条件断点,但同时记录了一次调试崩溃的函数调用过程。
源代码
本篇,我们将通过WinDbg分析C#语言的for循环的汇编级实现。源程序如下,首先初始化了一个int型变量sum,然后通过for循环完成从1到100的整数加法。
namespace BasicGrammar;
class Program
{ static void Main()
{
System.Diagnostics.Debugger.Break();
int sum = 0;
for(int i = 1; i <= 100; i++)
{
sum += i;
Console.WriteLine(sum);
}
}
}
程序的加载
我们先来分析一下,当使用WinDbg打开一个应用程序(如下图所示)时,后台模块的加载过程。
下面的列表是完成上述操作后,WinDbg主窗口输出的与模块加载相关的部分信息:
ModLoad: 00007ff6`33bb0000 00007ff6`33bd9000 apphost.exe
ModLoad: 00007ffb`cb1b0000 00007ffb`cb3c7000 ntdll.dll
ModLoad: 00007ffb`c9710000 00007ffb`c97d4000 C:\Windows\System32\KERNEL32.DLL
ModLoad: 00007ffb`c8550000 00007ffb`c88fd000 C:\Windows\System32\KERNELBASE.dll
ModLoad: 00007ffb`ca6f0000 00007ffb`ca89e000 C:\Windows\System32\USER32.dll
ModLoad: 00007ffb`c8cd0000 00007ffb`c8cf6000 C:\Windows\System32\win32u.dll
ModLoad: 00007ffb`ca8a0000 00007ffb`ca8c9000 C:\Windows\System32\GDI32.dll
ModLoad: 00007ffb`c8a90000 00007ffb`c8ba9000 C:\Windows\System32\gdi32full.dll
ModLoad: 00007ffb`c8900000 00007ffb`c899a000 C:\Windows\System32\msvcp_win.dll
ModLoad: 00007ffb`c8bb0000 00007ffb`c8cc1000 C:\Windows\System32\ucrtbase.dll
ModLoad: 00007ffb`ca8d0000 00007ffb`cb12f000 C:\Windows\System32\SHELL32.dll
ModLoad: 00007ffb`ca4e0000 00007ffb`ca592000 C:\Windows\System32\ADVAPI32.dll
ModLoad: 00007ffb`c8f50000 00007ffb`c8ff7000 C:\Windows\System32\msvcrt.dll
ModLoad: 00007ffb`c9ed0000 00007ffb`c9f79000 C:\Windows\System32\sechost.dll
ModLoad: 00007ffb`c8a60000 00007ffb`c8a88000 C:\Windows\System32\bcrypt.dll
ModLoad: 00007ffb`c9f80000 00007ffb`ca094000 C:\Windows\System32\RPCRT4.dll
(5344.654): Break instruction exception - code 80000003 (first chance)
ntdll!LdrpDoDebuggerBreak+0x30:
00007ffb`cb28bed4 cc int 3
首先看第一行:
ModLoad: 00007ff6
33bb0000 00007ff6
33bd9000 apphost.exe
- ModLoad:模块加载(module load的简写)。目前,我们可以简单将模块(module)理解为或者是exe或者是dll文件。
- 00007ff6`33bb0000:被加载模块在内存的起始地址
- 00007ff6`33bd9000:被加载模块在内存的结束地址
- apphost.exe:被加载的模块名
我们可以使用内存逐字节显示命令db显示一下被加载的内存:
0:000> db 00007ff6`33bb0000 00007ff6`33bd9000
00007ff6`33bb0000 4d 5a 90 00 03 00 00 00-04 00 00 00 ff ff 00 00 MZ..............
00007ff6`33bb0010 b8 00 00 00 00 00 00 00-40 00 00 00 00 00 00 00 ........@.......
00007ff6`33bb0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
00007ff6`33bb0030 00 00 00 00 00 00 00 00-00 00 00 00 f0 00 00 00 ................
00007ff6`33bb0040 0e 1f ba 0e 00 b4 09 cd-21 b8 01 4c cd 21 54 68 ........!..L.!Th
00007ff6`33bb0050 69 73 20 70 72 6f 67 72-61 6d 20 63 61 6e 6e 6f is program canno
00007ff6`33bb0060 74 20 62 65 20 72 75 6e-20 69 6e 20 44 4f 53 20 t be run in DOS
00007ff6`33bb0070 6d 6f 64 65 2e 0d 0d 0a-24 00 00 00 00 00 00 00 mode....$.......
00007ff6`33bb0080 ce b9 94 bf 8a d8 fa ec-8a d8 fa ec 8a d8 fa ec ................
00007ff6`33bb0090 8a d8 fa ec 8b d8 fa ec-48 59 fe ed 86 d8 fa ec ........HY......
00007ff6`33bb00a0 48 59 f9 ed 98 d8 fa ec-48 59 ff ed dc d8 fa ec HY......HY......
00007ff6`33bb00b0 83 a0 69 ec 9a d8 fa ec-c1 a0 fb ed 83 d8 fa ec ..i.............
00007ff6`33bb00c0 8a d8 fb ec 43 d8 fa ec-a3 5a f3 ed 80 d8 fa ec ....C....Z......
00007ff6`33bb00d0 a3 5a f8 ed 8b d8 fa ec-52 69 63 68 8a d8 fa ec .Z......Rich....
00007ff6`33bb00e0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
00007ff6`33bb00f0 50 45 00 00 64 86 07 00-00 00 cd 65 00 00 00 00 PE..d......e....
00007ff6`33bb0100 00 00 00 00 f0 00 22 00-0b 02 0e 27 00 6a 01 00 ......"....'.j..
00007ff6`33bb0110 00 d0 00 00 00 00 00 00-60 13 01 00 00 10 00 00 ........`.......
00007ff6`33bb0120 00 00 bb 33 f6 7f 00 00-00 10 00 00 00 02 00 00 ...3............
......略
db后面我们使用了起始地址+空格+结束地址的语法,这是内存区域语法之一,也可以使用起始地址+空格+L+长度语法。
如何查看起始地址到结束地址之间的长度?用结束地址-起始地址+1即可:
0:000> ? 00007ff6`33bd9000 - 00007ff6`33bb0000 + 1
Evaluate expression: 167937 = 00000000`00029001
167937是两个十六进制64位地址运算的十进制数字表达,等号后面是对应的十六进制表达。所以上面的db命令也可以改写为:
0:000> db 00007ff6
33bb0000 L00000000
00029001
**疑问:**为什么我们用WinDbg加载的是Core.exe,但实际加载列表中未发现Core.exe?apphost.exe是什么鬼?
其实,apphost.exe就是Core.exe. 你可以自己用十六进制编辑器将Core.exe打开,然后和上面我们用db命令显示的内存进行一下比较,会发现两者是完全一样的。另外,apphost.exe只是.NET5+使用的托管应用宿主程序,其运行以后会加载真实的托管模块Core.dll。我们可以用内存搜索命令s查一下上面db命令显示的内存空间是否存在Core.dll:
0:000> s -a 00007ff6`33bb0000 L00000000`00029001 "Core.dll"
00007ff6`33bd2130 43 6f 72 65 2e 64 6c 6c-00 00 00 00 00 00 00 00 Core.dll........
0:000> s -u 00007ff6`33bb0000 L00000000`00029001 "Core.dll"
00007ff6`33bd820c 0043 006f 0072 0065 002e 0064 006c 006c C.o.r.e...d.l.l.
00007ff6`33bd8270 0043 006f 0072 0065 002e 0064 006c 006c C.o.r.e...d.l.l.
上面,我们分别用s命令的ASCII选项-a和Unicode选项-u查找同一段内存,发现有一处Ascii和两处Unicode都指向了Core.dll文件。不过这个dll目前尚未被加载,原因很简单:此时apphost.exe尚未运行。
通过以上分析,我们知道,既然我们是用WinDbg打开Core.exe,所以WinDbg第一个要加载的模块也必须是Core.exe,只不过WinDbg并未显示真实文件名,而是显示成了apphost.exe。至于为什么要这样设计,我们会在后面的文章中解释。
下面我们继续分析第二行:
ModLoad: 00007ffb
cb1b0000 00007ffb
cb3c7000 ntdll.dll
WinDbg加载完apphost.exe以后,马上开始加载ntdll.dll,这个模块的加载不是由apphost决定的,而是由操作系统决定的。在Windows环境下,任何一个用户进程都需要加载ntdll模块,最简单的原因就是:当Windows进程被创建时,ntdll.dll会参与进程的初始化过程,会设置进程的环境变量、堆(Heap)、线程和模块加载等,为进程的运行提供一个稳定和一致的环境。其他如KERNELBASE,KERNEL32,USER32等也是类似道理。
下面我们再看看启动画面显示的最后一部分:
(5344.654): Break instruction exception - code 80000003 (first chance)
ntdll!LdrpDoDebuggerBreak+0x30:
00007ffb`cb28bed4 cc int 3
这三行说了一件事:WinDbg加载完上述模块以后,当程序主线程执行到ntdll模块的LdrpDoDebuggerBreak函数的第0x30字节时,遇到了断点指令(int 3),该指令位于00007ffb`cb28bed4位置,该指令对应的CPU指令码是单字节cc。操作系统是以断点指令异常(Break instruction exception)方式报告给WinDbg的,该异常代码是80000003,而且这是该异常第一次分发(first chance)。开始的5344是操作系统标记的进程号,654是操作系统记录的当前线程号,可以分别使用进程查询命令(|)和线程查询命令(~)获取:
0:000> |
. 0 id: 5344 create name: apphost.exe
0:000> ~
. 0 Id: 5344.654 Suspend: 1 Teb: 00000000`003bd000 Unfrozen
其他线程略
WinDbg命令分类
WinDbg有三种命令,分别为基本命令、元命令和扩展命令。以半角句点(.)开始的是元命令,以半角感叹号(!)开始的是扩展命令,无任何标记的是基本命令。有关这三种命令的细节我们将在第七篇详细介绍,目前仅需知道,扩展命令不是WinDbg自带的,而是通过加载第三方dll的方式扩展的。在使用WinDbg分析.NET应用时,经常会用到sos.dll,这个模块提供了很多与托管代码调试相关的扩展命令,比如我们上一篇中使用的!u反汇编命令就来自于sos扩展,本篇我们将遇到的!clrstack,!dso等都是sos扩展。
for循环汇编级分析
下面我们开始进入主题:用WinDbg从汇编级别分析C#的for循环。
首先输入g命令执行程序,程序会在遇到Debugger.Break()设置的int 3指令断点处被断下:
0:000> g
ModLoad: 00007ffb`cb130000 00007ffb`cb161000 C:\Windows\System32\IMM32.DLL
ModLoad: 00007ffb`3d0e0000 00007ffb`3d139000 C:\Program Files\dotnet\host\fxr\8.0.3\hostfxr.dll
ModLoad: 00007ffb`90530000 00007ffb`90594000 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\hostpolicy.dll
ModLoad: 00007ffb`32470000 00007ffb`32956000 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\coreclr.dll
ModLoad: 00007ffb`ca0b0000 00007ffb`ca255000 C:\Windows\System32\ole32.dll
ModLoad: 00007ffb`c9090000 00007ffb`c9418000 C:\Windows\System32\combase.dll
ModLoad: 00007ffb`c95d0000 00007ffb`c96a7000 C:\Windows\System32\OLEAUT32.dll
ModLoad: 00007ffb`c8e70000 00007ffb`c8eeb000 C:\Windows\System32\bcryptPrimitives.dll
(5344.654): Unknown exception - code 04242420 (first chance)
ModLoad: 00007ffb`27280000 00007ffb`27f0c000 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\System.Private.CoreLib.dll
ModLoad: 00007ffb`31c40000 00007ffb`31df9000 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\clrjit.dll
ModLoad: 00007ffb`c75a0000 00007ffb`c75b8000 C:\Windows\SYSTEM32\kernel.appcore.dll
ModLoad: 00000000`02330000 00000000`02338000 E:\test\a\Core\bin\Debug\net8.0\Core.dll
ModLoad: 00000000`02340000 00000000`0234e000 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\System.Runtime.dll
ModLoad: 00007ffb`87180000 00007ffb`871a8000 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\System.Console.dll
(5344.654): Break instruction exception - code 80000003 (first chance)
KERNELBASE!wil::details::DebugBreak+0x2:
00007ffb`c8667a72 cc int 3
我们使用上一篇介绍的快速回到Main方法的手段,让程序从当前的KERNELBASE!wil::details::DebugBreak+0x2回到Main方法中:
0:000> k
# Child-SP RetAddr Call Site
00 00000000`001cead8 00007ffb`32682359 KERNELBASE!wil::details::DebugBreak+0x2
01 00000000`001ceae0 00007ffb`276a550a coreclr!DebugDebugger::Break+0x149 [D:\a\_work\1\s\src\coreclr\vm\debugdebugger.cpp @ 150]
02 00000000`001cec60 00007ffa`d2a61958 System_Private_CoreLib!System.Diagnostics.Debugger.Break+0xa [/_/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs @ 18]
03 00000000`001cec90 00007ffb`325cb8c3 Core!BasicGrammar.Program.Main+0x28 [E:\test\a\Core\Program.cs @ 5]
0:000> g Core!BasicGrammar.Program.Main+0x28
Core!BasicGrammar.Program.Main+0x28:
00007ffa`d2a61958 90 nop
此时系统会自动将C#源代码载入,界面截图如下:
上面截图中,虽然左侧的反汇编窗口已经可以和中间的C#源代码对应,不过因为这个反汇编是WinDbg根据CoreClr的JIT编译器编译后代码做的反汇编,没有任何源代码信息,也没有符号,看起来不是特别直观。所以,我们可以再次使用第一篇中介绍的技术,使用!sos.u命令:
0:000> !sos.u 00007ffa`d2a61958
然后,就非常方便C#源代码与汇编代码的对应了,如下图所示:
以上关键要注意的是源代码的第7行:for(int i = 1; i <= 100; i++),在汇编级别,其实它被分成了两部分,两部分之间夹着循环体(8 ~ 11行)。为了便于理解,我将循环体部分省略掉,汇编代码格式如下:
E:\test\a\Core\Program.cs @ 6: int sum = 0;
00007ffa`d2a61959 33c9 xor ecx,ecx
00007ffa`d2a6195b 894dfc mov dword ptr [rbp-4],ecx ;初始化 int sum = 0
E:\test\a\Core\Program.cs @ 7:
00007ffa`d2a6195e c745f801000000 mov dword ptr [rbp-8],1 ;初始化 int i = 0
00007ffa`d2a61965 90 nop
00007ffa`d2a61966 eb1d jmp Core!BasicGrammar.Program.Main+0x55 (00007ffa`d2a61985)
E:\test\a\Core\Program.cs @ 8 ~ 11: 略
E:\test\a\Core\Program.cs @ 7:
00007ffa`d2a6197d 8b45f8 mov eax,dword ptr [rbp-8] ;i 赋值给eax
00007ffa`d2a61980 ffc0 inc eax; eax + 1
00007ffa`d2a61982 8945f8 mov dword ptr [rbp-8],eax ; i 值加 1 覆盖到原来的i中
00007ffa`d2a61985 33c9 xor ecx,ecx ;使exc高位置0,以确保下面语句的cl和ecx值相等
00007ffa`d2a61987 837df864 cmp dword ptr [rbp-8],64h ;比较变量 i 和 100
00007ffa`d2a6198b 0f9ec1 setle cl ;入股i ≤ 100,则cl置1,否则置0
00007ffa`d2a6198e 894df4 mov dword ptr [rbp-0Ch],ecx
00007ffa`d2a61991 837df400 cmp dword ptr [rbp-0Ch],0
00007ffa`d2a61995 75d1 jne Core!BasicGrammar.Program.Main+0x38 (00007ffa`d2a61968);如i≤100则跳转到循环体开始。
根据以上代码及我写的注释,C#的for循环结构应该非常清晰了:
- int i = 0 只执行一次,然后使用跳转比较 i 和 100,如果 i ≤ 100,就跳转到循环体执行
- 循环体执行完毕以后,将i值传送给eax寄存器并加1,然后重新将eax存回 i 变量所属内存,之后执行上一步比较。
r命令
程序的执行离不开CPU寄存器,所以在使用WinDbg调试程序时,经常要使用r命令显示寄存器的当前值。
另外,r命令也可以修改寄存器值。
备注:实际显示及修改的寄存器值并非实时CPU寄存器值,而是线程上下文保存的寄存器状态快照值。如果对进程或线程不理解,可能会不理解这句话,可以忽略。
1. 显示寄存器:r命令
r命令非常简单,输入r并回车,就可以显示CPU各寄存器的值:
0:000> r
rax=0000000000000000 rbx=00000000001cedc8 rcx=74224911a5ae0000
rdx=000000000051bd40 rsi=00000000001ced78 rdi=00000000001cef18
rip=00007ffad2a61958 rsp=00000000001cec90 rbp=00000000001cecc0
r8=0000000000000130 r9=00000000001cef09 r10=00007ffb32904678
r11=00000000001cec40 r12=00000000001ced30 r13=0000000000000004
r14=0000000000000000 r15=00000000001cee90
iopl=0 nv up ei pl nz na po nc
cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000206
Core!BasicGrammar.Program.Main+0x28:
00007ffa`d2a61958 90 nop
首先需要关注rbp寄存器,当前rbp=00000000001cecc0,因为当前栈帧是在Main方法中,所以Main的所有局部变量地址都一定是小于当前rbp的,我们在前面对Main汇编分析时也知道,所有变量地址都是rbp减去一个数值。
2. 查看段描述符:dg + address
使用dg + <段选择子> 可以显示对应的段描述符 (segment descriptor),比如从上面的寄存器列表我们知道,数据段选择子ds = es = ss = gs = 002b,cs和gs段则与其不同。可以使用dg 段寄存器或dg 段选择子可以列出对应的段描述符,唯一例外是cs段,因为是代码段,在用户态WinDbg不可读:
0:000> dg cs
P Si Gr Pr Lo
Sel Base Limit Type l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
0033 Unable to get descriptor
0:000> dg 002b
P Si Gr Pr Lo
Sel Base Limit Type l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
002B 00000000`00000000 00000000`ffffffff Data RW Ac 3 Bg Pg P Nl 00000cf3
0:000> dg ds
P Si Gr Pr Lo
Sel Base Limit Type l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
002B 00000000`00000000 00000000`ffffffff Data RW Ac 3 Bg Pg P Nl 00000cf3
从上面列表结果,我们可以知道,而且知道数据段基址从0000000000000000 ~ 00000000ffffffff,总计4GB地址空间,可读可写(RW),DPL=3,均为实际物理存在的段等等信息。一般在Windows环境下,FS:0通常用于保存异常处理链表头,所以FS的值也有所不同:
0:000> dg fs
P Si Gr Pr Lo
Sel Base Limit Type l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
0053 00000000`003bf000 00000000`00000fff Data RW Ac 3 Bg By P Nl 000004f3
另外,段选择子的第3~15位是段索引,如果这部分相同,则处于同一个段。显然cs=0033,其去掉最低3位以后,其二进制值是0110,而ds的002b去掉最低3位后的二进制索引是0010,因此不是同一个段。
备注:有关段寄存器、段选择子和段描述符,涉及到CPU的保护模式基础知识,如果大家看不懂,可以暂时忽略,我也会在后续文章中对相关知识进行介绍。
故障描述
在写本系列文章的过程中,不止一次发生了调试失败的情况,基本都是单步运行过程中发生的,也就是一旦单步跟踪进被调用子程序,比如Console.WriteLine(),就可能导致类似下面的问题,至今未找到问题原因:
0:000> g
(2c18.4194): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
00007ffa`d2141548 0000 add byte ptr [rax],al ds:00007ffa`d2141548=00
我个人猜想,出现这个问题的主要原因可能是因为我们的应用程序是.NET8.0的,属于跨平台的应用,肯定包含了很多与Windows原生应用不一致的特殊处理,而WinDbg是纯粹的Windows应用程序调试器,对于它和coreclr的交互应该还没有完全磨合好,或许改成.NET Framework程序就不会发生了,以后如果得到验证再更新。
万般无奈,我用wt命令做了一下调用展开,暂时先将将问题记录下来。如果读者有遇到类似问题并有解决方案,欢迎赐教。
0:000> wt
17 0 [ 0] coreclr!DebugDebugger::Break
10 0 [ 1] coreclr!HelperMethodFrame::Pop
19 10 [ 0] coreclr!DebugDebugger::Break
4 0 [ 1] coreclr!HelperMethodFrameRestoreState
24 14 [ 0] coreclr!DebugDebugger::Break
6 0 [ 1] coreclr!__security_check_cookie
33 20 [ 0] coreclr!DebugDebugger::Break
33 20 [ 0] coreclr!DebugDebugger::Break
3 0 [ 0] System_Private_CoreLib!System.Diagnostics.Debugger.Break
3 0 [ 0] System_Private_CoreLib!System.Diagnostics.Debugger.Break
18 0 [ 0] Core!BasicGrammar.Program.Main
1 0 [ 1] 0x00007ffa`d21f0756
1 0 [ 1] 0x00007ffa`d21f075d
20 0 [ 1] coreclr!ThePreStub
11 0 [ 2] coreclr!PreStubWorker
1 0 [ 3] KERNEL32!GetLastErrorStub
3 0 [ 3] KERNELBASE!GetLastError
103 4 [ 2] coreclr!PreStubWorker
33 0 [ 3] coreclr!MethodDesc::DoPrestub
5 0 [ 4] coreclr!MethodTable::ContainsGenericVariables
43 5 [ 3] coreclr!MethodDesc::DoPrestub
4 0 [ 4] coreclr!StressLog::LogOn
79 9 [ 3] coreclr!MethodDesc::DoPrestub
103 0 [ 4] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
223 0 [ 5] coreclr!ReadyToRunInfo::GetEntryPoint
24 0 [ 6] coreclr!CrstBase::Enter
10 0 [ 7] ntdll!RtlEnterCriticalSection
32 10 [ 6] coreclr!CrstBase::Enter
405 42 [ 5] coreclr!ReadyToRunInfo::GetEntryPoint
19 0 [ 6] ntdll!RtlLeaveCriticalSection
427 61 [ 5] coreclr!ReadyToRunInfo::GetEntryPoint
11 0 [ 6] ntdll!LdrpDispatchUserCallTarget
19 0 [ 6] coreclr!Debugger::JITComplete
448 91 [ 5] coreclr!ReadyToRunInfo::GetEntryPoint
120 539 [ 4] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
11 0 [ 5] ntdll!LdrpDispatchUserCallTarget
29 0 [ 5] coreclr!PrepareCodeConfig::SetNativeCode
138 579 [ 4] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
7 0 [ 5] coreclr!DACNotifyCompilationFinished
8 0 [ 6] coreclr!JITNotifications::JITNotifications
9 8 [ 5] coreclr!DACNotifyCompilationFinished
4 0 [ 6] coreclr!JITNotifications::IsActive
13 12 [ 5] coreclr!DACNotifyCompilationFinished
230 604 [ 4] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
15 0 [ 5] coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
19 0 [ 6] coreclr!CrstBase::Enter
10 0 [ 7] ntdll!RtlEnterCriticalSection
27 10 [ 6] coreclr!CrstBase::Enter
51 37 [ 5] coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
19 0 [ 6] ntdll!RtlLeaveCriticalSection
63 56 [ 5] coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
234 723 [ 4] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
6 0 [ 5] coreclr!__security_check_cookie
244 729 [ 4] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
86 982 [ 3] coreclr!MethodDesc::DoPrestub
81 0 [ 4] coreclr!MethodDesc::DoBackpatch
96 1063 [ 3] coreclr!MethodDesc::DoPrestub
114 1163 [ 2] coreclr!PreStubWorker
1 0 [ 3] coreclr!ThePreStubPatch
1 0 [ 3] coreclr!ThePreStubPatchLabel
130 1165 [ 2] coreclr!PreStubWorker
1 0 [ 3] KERNEL32!SetLastErrorStub
15 0 [ 3] ntdll!RtlSetLastWin32Error
6 0 [ 4] ntdll!_security_check_cookie
17 6 [ 3] ntdll!RtlSetLastWin32Error
141 1189 [ 2] coreclr!PreStubWorker
38 1330 [ 1] coreclr!ThePreStub
1 0 [ 1] 0x00007ffa`d21f0750
4 0 [ 1] System_Console!System.Console.WriteLine
4 0 [ 2] System_Console
22 0 [ 2] coreclr!DelayLoad_MethodCall
14 0 [ 3] coreclr!ExternalMethodFixupWorker
1 0 [ 4] KERNEL32!GetLastErrorStub
3 0 [ 4] KERNELBASE!GetLastError
35 4 [ 3] coreclr!ExternalMethodFixupWorker
4 0 [ 4] coreclr!Frame::GetReturnAddress
11 0 [ 5] ntdll!LdrpDispatchUserCallTarget
4 0 [ 5] coreclr!TransitionFrame::GetReturnAddressPtr
11 0 [ 6] ntdll!LdrpDispatchUserCallTarget
2 0 [ 6] coreclr!MulticastFrame::GetFunction
7 13 [ 5] coreclr!TransitionFrame::GetReturnAddressPtr
11 31 [ 4] coreclr!Frame::GetReturnAddress
171 46 [ 3] coreclr!ExternalMethodFixupWorker
13 0 [ 4] coreclr!MethodDesc::CheckRestore
177 59 [ 3] coreclr!ExternalMethodFixupWorker
96 0 [ 4] coreclr!MethodDesc::PrepareForUseAsADependencyOfANativeImageWorker
11 0 [ 5] ntdll!LdrpDispatchUserCallTarget
28 0 [ 5] coreclr!MDInternalRO::GetSigOfMethodDef
11 0 [ 6] ntdll!LdrpDispatchUserCallTarget
31 0 [ 6] coreclr!StgBlobPoolReadOnly::GetBlob
40 42 [ 5] coreclr!MDInternalRO::GetSigOfMethodDef
124 93 [ 4] coreclr!MethodDesc::PrepareForUseAsADependencyOfANativeImageWorker
19 0 [ 5] coreclr!CorSigUncompressData
225 112 [ 4] coreclr!MethodDesc::PrepareForUseAsADependencyOfANativeImageWorker
36 0 [ 5] coreclr!SigParser::SkipExactlyOne
5 0 [ 6] coreclr!CorSigUncompressToken
19 0 [ 7] coreclr!CorSigUncompressData
18 19 [ 6] coreclr!CorSigUncompressToken
48 37 [ 5] coreclr!SigParser::SkipExactlyOne
266 197 [ 4] coreclr!MethodDesc::PrepareForUseAsADependencyOfANativeImageWorker
198 522 [ 3] coreclr!ExternalMethodFixupWorker
13 0 [ 4] coreclr!DomainAssembly::EnsureLoadLevel
218 535 [ 3] coreclr!ExternalMethodFixupWorker
13 0 [ 4] coreclr!DomainAssembly::EnsureLoadLevel
492 548 [ 3] coreclr!ExternalMethodFixupWorker
1 0 [ 4] KERNEL32!SetLastErrorStub
15 0 [ 4] ntdll!RtlSetLastWin32Error
6 0 [ 5] ntdll!_security_check_cookie
17 6 [ 4] ntdll!RtlSetLastWin32Error
502 572 [ 3] coreclr!ExternalMethodFixupWorker
39 1074 [ 2] coreclr!DelayLoad_MethodCall
1 0 [ 2] coreclr!ExternalMethodFixupPatchLabel
1 0 [ 2] 0x00007ffa`d21f00c0
1 0 [ 2] 0x00007ffa`d21f00c6
1 0 [ 2] 0x00007ffa`d21f00cd
20 0 [ 2] coreclr!ThePreStub
11 0 [ 3] coreclr!PreStubWorker
1 0 [ 4] KERNEL32!GetLastErrorStub
3 0 [ 4] KERNELBASE!GetLastError
103 4 [ 3] coreclr!PreStubWorker
33 0 [ 4] coreclr!MethodDesc::DoPrestub
5 0 [ 5] coreclr!MethodTable::ContainsGenericVariables
43 5 [ 4] coreclr!MethodDesc::DoPrestub
4 0 [ 5] coreclr!StressLog::LogOn
79 9 [ 4] coreclr!MethodDesc::DoPrestub
103 0 [ 5] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
222 0 [ 6] coreclr!ReadyToRunInfo::GetEntryPoint
24 0 [ 7] coreclr!CrstBase::Enter
10 0 [ 8] ntdll!RtlEnterCriticalSection
32 10 [ 7] coreclr!CrstBase::Enter
404 42 [ 6] coreclr!ReadyToRunInfo::GetEntryPoint
19 0 [ 7] ntdll!RtlLeaveCriticalSection
426 61 [ 6] coreclr!ReadyToRunInfo::GetEntryPoint
11 0 [ 7] ntdll!LdrpDispatchUserCallTarget
19 0 [ 7] coreclr!Debugger::JITComplete
447 91 [ 6] coreclr!ReadyToRunInfo::GetEntryPoint
120 538 [ 5] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
11 0 [ 6] ntdll!LdrpDispatchUserCallTarget
29 0 [ 6] coreclr!PrepareCodeConfig::SetNativeCode
138 578 [ 5] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
7 0 [ 6] coreclr!DACNotifyCompilationFinished
8 0 [ 7] coreclr!JITNotifications::JITNotifications
9 8 [ 6] coreclr!DACNotifyCompilationFinished
4 0 [ 7] coreclr!JITNotifications::IsActive
13 12 [ 6] coreclr!DACNotifyCompilationFinished
230 603 [ 5] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
15 0 [ 6] coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
19 0 [ 7] coreclr!CrstBase::Enter
10 0 [ 8] ntdll!RtlEnterCriticalSection
27 10 [ 7] coreclr!CrstBase::Enter
51 37 [ 6] coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
19 0 [ 7] ntdll!RtlLeaveCriticalSection
63 56 [ 6] coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
234 722 [ 5] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
6 0 [ 6] coreclr!__security_check_cookie
244 728 [ 5] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
86 981 [ 4] coreclr!MethodDesc::DoPrestub
81 0 [ 5] coreclr!MethodDesc::DoBackpatch
96 1062 [ 4] coreclr!MethodDesc::DoPrestub
114 1162 [ 3] coreclr!PreStubWorker
1 0 [ 4] coreclr!ThePreStubPatch
1 0 [ 4] coreclr!ThePreStubPatchLabel
130 1164 [ 3] coreclr!PreStubWorker
1 0 [ 4] KERNEL32!SetLastErrorStub
15 0 [ 4] ntdll!RtlSetLastWin32Error
6 0 [ 5] ntdll!_security_check_cookie
17 6 [ 4] ntdll!RtlSetLastWin32Error
141 1188 [ 3] coreclr!PreStubWorker
38 1329 [ 2] coreclr!ThePreStub
1 0 [ 2] 0x00007ffa`d21f00c0
2 0 [ 2] System_Console!System.Console.get_Out
4 0 [ 3] System_Console
23 0 [ 3] coreclr!DelayLoad_Helper
38 0 [ 4] coreclr!DynamicHelperWorker
11 0 [ 5] ntdll!LdrpDispatchUserCallTarget
4 0 [ 5] coreclr!Frame::GetReturnAddress
11 0 [ 6] ntdll!LdrpDispatchUserCallTarget
4 0 [ 6] coreclr!TransitionFrame::GetReturnAddressPtr
11 0 [ 7] ntdll!LdrpDispatchUserCallTarget
2 0 [ 7] coreclr!MulticastFrame::GetFunction
7 13 [ 6] coreclr!TransitionFrame::GetReturnAddressPtr
11 31 [ 5] coreclr!Frame::GetReturnAddress
72 53 [ 4] coreclr!DynamicHelperWorker
107 0 [ 5] coreclr!DynamicHelperFixup
76 0 [ 6] coreclr!SigPointer::GetTypeHandleThrowing
5 0 [ 7] coreclr!CorSigUncompressToken
19 0 [ 8] coreclr!CorSigUncompressData
18 19 [ 7] coreclr!CorSigUncompressToken
104 37 [ 6] coreclr!SigPointer::GetTypeHandleThrowing
68 0 [ 7] coreclr!ClassLoader::LoadTypeDefOrRefThrowing
120 105 [ 6] coreclr!SigPointer::GetTypeHandleThrowing
6 0 [ 7] coreclr!__security_check_cookie
131 111 [ 6] coreclr!SigPointer::GetTypeHandleThrowing
111 242 [ 5] coreclr!DynamicHelperFixup
15 0 [ 6] coreclr!MethodTable::EnsureInstanceActive
13 0 [ 7] coreclr!DomainAssembly::EnsureLoadLevel
30 13 [ 6] coreclr!MethodTable::EnsureInstanceActive
13 0 [ 7] coreclr!DomainAssembly::EnsureLoadLevel
43 26 [ 6] coreclr!MethodTable::EnsureInstanceActive
113 311 [ 5] coreclr!DynamicHelperFixup
39 0 [ 6] coreclr!MethodTable::CheckRunClassInitThrowing
32 0 [ 7] coreclr!DomainLocalModule::PopulateClass
24 0 [ 8] coreclr!CrstBase::Enter
10 0 [ 9] ntdll!RtlEnterCriticalSection
32 10 [ 8] coreclr!CrstBase::Enter
37 42 [ 7] coreclr!DomainLocalModule::PopulateClass
13 0 [ 8] coreclr!DomainLocalModule::GetClassFlags
56 55 [ 7] coreclr!DomainLocalModule::PopulateClass
12 0 [ 8] coreclr!DomainLocalModule::SetClassFlags
6 0 [ 9] coreclr!MethodTable::GetTypeDefRid
21 6 [ 8] coreclr!DomainLocalModule::SetClassFlags
59 82 [ 7] coreclr!DomainLocalModule::PopulateClass
5 0 [ 8] coreclr!CrstBase::Leave
19 0 [ 9] ntdll!RtlLeaveCriticalSection
11 19 [ 8] coreclr!CrstBase::Leave
67 112 [ 7] coreclr!DomainLocalModule::PopulateClass
51 179 [ 6] coreclr!MethodTable::CheckRunClassInitThrowing
29 0 [ 7] coreclr!MethodTable::DoRunClassInitThrowing
5 0 [ 8] coreclr!MethodTable::GetModule
33 5 [ 7] coreclr!MethodTable::DoRunClassInitThrowing
13 0 [ 8] coreclr!DomainAssembly::EnsureLoadLevel
39 18 [ 7] coreclr!MethodTable::DoRunClassInitThrowing
4 0 [ 8] coreclr!StressLog::LogOn
49 22 [ 7] coreclr!MethodTable::DoRunClassInitThrowing
29 0 [ 8] coreclr!CrstBase::Enter
10 0 [ 9] ntdll!RtlEnterCriticalSection
41 10 [ 8] coreclr!CrstBase::Enter
107 73 [ 7] coreclr!MethodTable::DoRunClassInitThrowing
22 0 [ 8] ntdll!RtlAllocateHeap
62 0 [ 8] ntdll!RtlpAllocateHeapInternal
37 0 [ 9] ntdll!RtlpAllocateHeap
19 0 [ 10] ntdll!RtlDebugAllocateHeap
12 0 [ 11] ntdll!RtlpCheckHeapSignature
44 12 [ 10] ntdll!RtlDebugAllocateHeap
10 0 [ 11] ntdll!RtlEnterCriticalSection
50 22 [ 10] ntdll!RtlDebugAllocateHeap
18 0 [ 11] ntdll!RtlpValidateHeap
14 0 [ 12] ntdll!RtlpValidateHeapHeaders
37 14 [ 11] ntdll!RtlpValidateHeap
54 73 [ 10] ntdll!RtlDebugAllocateHeap
22 0 [ 11] ntdll!RtlAllocateHeap
62 0 [ 11] ntdll!RtlpAllocateHeapInternal
103 0 [ 12] ntdll!RtlpAllocateHeap
10 0 [ 13] ntdll!RtlpGetLFHContext
273 10 [ 12] ntdll!RtlpAllocateHeap
74 0 [ 13] ntdll!RtlpHeapRemoveListEntry
297 84 [ 12] ntdll!RtlpAllocateHeap
46 0 [ 13] ntdll!RtlCompareMemoryUlong
397 130 [ 12] ntdll!RtlpAllocateHeap
7 0 [ 13] ntdll!RtlpGetExtraStuffPointer
438 137 [ 12] ntdll!RtlpAllocateHeap
89 575 [ 11] ntdll!RtlpAllocateHeapInternal
59 759 [ 10] ntdll!RtlDebugAllocateHeap
14 0 [ 11] ntdll!RtlpValidateHeapHeaders
80 773 [ 10] ntdll!RtlDebugAllocateHeap
7 0 [ 11] ntdll!RtlpGetExtraStuffPointer
128 780 [ 10] ntdll!RtlDebugAllocateHeap
48 908 [ 9] ntdll!RtlpAllocateHeap
89 956 [ 8] ntdll!RtlpAllocateHeapInternal
115 1140 [ 7] coreclr!MethodTable::DoRunClassInitThrowing
18 0 [ 8] coreclr!ListLockEntryBase<void *>::ListLockEntryBase<void *>
32 0 [ 9] ntdll!RtlInitializeCriticalSection
6 0 [ 10] ntdll!_security_check_cookie
36 6 [ 9] ntdll!RtlInitializeCriticalSection
41 42 [ 8] coreclr!ListLockEntryBase<void *>::ListLockEntryBase<void *>
130 1223 [ 7] coreclr!MethodTable::DoRunClassInitThrowing
5 0 [ 8] coreclr!CrstBase::Leave
19 0 [ 9] ntdll!RtlLeaveCriticalSection
11 19 [ 8] coreclr!CrstBase::Leave
137 1253 [ 7] coreclr!MethodTable::DoRunClassInitThrowing
19 0 [ 8] coreclr!CrstBase::Enter
10 0 [ 9] ntdll!RtlEnterCriticalSection
27 10 [ 8] coreclr!CrstBase::Enter
148 1290 [ 7] coreclr!MethodTable::DoRunClassInitThrowing
5 0 [ 8] coreclr!CrstBase::Leave
19 0 [ 9] ntdll!RtlLeaveCriticalSection
11 19 [ 8] coreclr!CrstBase::Leave
150 1320 [ 7] coreclr!MethodTable::DoRunClassInitThrowing
7 0 [ 8] coreclr!ListLockEntryBase<void *>::FinishDeadlockAwareEnter
29 0 [ 9] coreclr!CrstBase::Enter
10 0 [ 10] ntdll!RtlEnterCriticalSection
41 10 [ 9] coreclr!CrstBase::Enter
22 51 [ 8] coreclr!ListLockEntryBase<void *>::FinishDeadlockAwareEnter
178 1393 [ 7] coreclr!MethodTable::DoRunClassInitThrowing
37 0 [ 8] coreclr!MethodTable::RunClassInitEx
15 0 [ 9] coreclr!MethodTable::EnsureInstanceActive
13 0 [ 10] coreclr!DomainAssembly::EnsureLoadLevel
30 13 [ 9] coreclr!MethodTable::EnsureInstanceActive
13 0 [ 10] coreclr!DomainAssembly::EnsureLoadLevel
43 26 [ 9] coreclr!MethodTable::EnsureInstanceActive
41 69 [ 8] coreclr!MethodTable::RunClassInitEx
4 0 [ 9] coreclr!StressLog::LogOn
52 73 [ 8] coreclr!MethodTable::RunClassInitEx
16 0 [ 9] coreclr!MethodTable::GetSlotPtrRaw
67 89 [ 8] coreclr!MethodTable::RunClassInitEx
25 0 [ 9] coreclr!DispatchCallSimple
7 0 [ 10] coreclr!DispatchCallDebuggerWrapper
17 0 [ 11] coreclr!CallDescrWorkerWithHandler
45 0 [ 11] coreclr!CallDescrWorkerInternal
1 0 [ 12] 0x00007ffa`d21f09f0
1 0 [ 12] 0x00007ffa`d21f09f6
1 0 [ 12] 0x00007ffa`d21f09fd
20 0 [ 12] coreclr!ThePreStub
11 0 [ 13] coreclr!PreStubWorker
1 0 [ 14] KERNEL32!GetLastErrorStub
3 0 [ 14] KERNELBASE!GetLastError
103 4 [ 13] coreclr!PreStubWorker
33 0 [ 14] coreclr!MethodDesc::DoPrestub
5 0 [ 15] coreclr!MethodTable::ContainsGenericVariables
43 5 [ 14] coreclr!MethodDesc::DoPrestub
4 0 [ 15] coreclr!StressLog::LogOn
79 9 [ 14] coreclr!MethodDesc::DoPrestub
103 0 [ 15] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
220 0 [ 16] coreclr!ReadyToRunInfo::GetEntryPoint
6 0 [ 17] coreclr!Module::GetReadyToRunImage
229 6 [ 16] coreclr!ReadyToRunInfo::GetEntryPoint
15 0 [ 17] coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
7 0 [ 18] coreclr!NibbleReader::ReadEncodedU32
21 0 [ 19] coreclr!NibbleReader::ReadNibble
17 21 [ 18] coreclr!NibbleReader::ReadEncodedU32
25 38 [ 17] coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
15 0 [ 18] coreclr!PEDecoder::GetRvaData
28 53 [ 17] coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
7 0 [ 18] coreclr!NibbleReader::ReadEncodedU32
21 0 [ 19] coreclr!NibbleReader::ReadNibble
14 21 [ 18] coreclr!NibbleReader::ReadEncodedU32
21 0 [ 19] coreclr!NibbleReader::ReadNibble
24 42 [ 18] coreclr!NibbleReader::ReadEncodedU32
35 119 [ 17] coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
31 0 [ 18] coreclr!Module::FixupNativeEntry
70 0 [ 19] coreclr!LoadDynamicInfoEntry
68 0 [ 20] coreclr!SigPointer::GetTypeHandleThrowing
6 0 [ 21] coreclr!__security_check_cookie
79 6 [ 20] coreclr!SigPointer::GetTypeHandleThrowing
83 85 [ 19] coreclr!LoadDynamicInfoEntry
13 0 [ 20] coreclr!DomainAssembly::EnsureLoadLevel
99 98 [ 19] coreclr!LoadDynamicInfoEntry
6 0 [ 20] coreclr!__security_check_cookie
108 104 [ 19] coreclr!LoadDynamicInfoEntry
43 212 [ 18] coreclr!Module::FixupNativeEntry
39 374 [ 17] coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
7 0 [ 18] coreclr!NibbleReader::ReadEncodedU32
21 0 [ 19] coreclr!NibbleReader::ReadNibble
17 21 [ 18] coreclr!NibbleReader::ReadEncodedU32
43 412 [ 17] coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
7 0 [ 18] coreclr!NibbleReader::ReadEncodedU32
21 0 [ 19] coreclr!NibbleReader::ReadNibble
17 21 [ 18] coreclr!NibbleReader::ReadEncodedU32
57 450 [ 17] coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
246 513 [ 16] coreclr!ReadyToRunInfo::GetEntryPoint
24 0 [ 17] coreclr!CrstBase::Enter
10 0 [ 18] ntdll!RtlEnterCriticalSection
32 10 [ 17] coreclr!CrstBase::Enter
433 555 [ 16] coreclr!ReadyToRunInfo::GetEntryPoint
19 0 [ 17] ntdll!RtlLeaveCriticalSection
455 574 [ 16] coreclr!ReadyToRunInfo::GetEntryPoint
11 0 [ 17] ntdll!LdrpDispatchUserCallTarget
19 0 [ 17] coreclr!Debugger::JITComplete
476 604 [ 16] coreclr!ReadyToRunInfo::GetEntryPoint
120 1080 [ 15] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
11 0 [ 16] ntdll!LdrpDispatchUserCallTarget
29 0 [ 16] coreclr!PrepareCodeConfig::SetNativeCode
138 1120 [ 15] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
7 0 [ 16] coreclr!DACNotifyCompilationFinished
8 0 [ 17] coreclr!JITNotifications::JITNotifications
9 8 [ 16] coreclr!DACNotifyCompilationFinished
4 0 [ 17] coreclr!JITNotifications::IsActive
13 12 [ 16] coreclr!DACNotifyCompilationFinished
247 1145 [ 15] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
15 0 [ 16] coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
19 0 [ 17] coreclr!CrstBase::Enter
10 0 [ 18] ntdll!RtlEnterCriticalSection
27 10 [ 17] coreclr!CrstBase::Enter
51 37 [ 16] coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
19 0 [ 17] ntdll!RtlLeaveCriticalSection
63 56 [ 16] coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
251 1264 [ 15] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
6 0 [ 16] coreclr!__security_check_cookie
261 1270 [ 15] coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
86 1540 [ 14] coreclr!MethodDesc::DoPrestub
97 0 [ 15] coreclr!MethodDesc::DoBackpatch
96 1637 [ 14] coreclr!MethodDesc::DoPrestub
114 1737 [ 13] coreclr!PreStubWorker
1 0 [ 14] coreclr!ThePreStubPatch
1 0 [ 14] coreclr!ThePreStubPatchLabel
130 1739 [ 13] coreclr!PreStubWorker
1 0 [ 14] KERNEL32!SetLastErrorStub
15 0 [ 14] ntdll!RtlSetLastWin32Error
6 0 [ 15] ntdll!_security_check_cookie
17 6 [ 14] ntdll!RtlSetLastWin32Error
141 1763 [ 13] coreclr!PreStubWorker
38 1904 [ 12] coreclr!ThePreStub
1 0 [ 12] 0x00007ffa`d21f09f0
3 0 [ 12] System_Console!System.Console.WriteLine
4 0 [ 13] System_Console
23 0 [ 13] coreclr!DelayLoad_Helper
38 0 [ 14] coreclr!DynamicHelperWorker
11 0 [ 15] ntdll!LdrpDispatchUserCallTarget
4 0 [ 15] coreclr!Frame::GetReturnAddress
11 0 [ 16] ntdll!LdrpDispatchUserCallTarget
4 0 [ 16] coreclr!TransitionFrame::GetReturnAddressPtr
11 0 [ 17] ntdll!LdrpDispatchUserCallTarget
2 0 [ 17] coreclr!MulticastFrame::GetFunction
7 13 [ 16] coreclr!TransitionFrame::GetReturnAddressPtr
11 31 [ 15] coreclr!Frame::GetReturnAddress
72 53 [ 14] coreclr!DynamicHelperWorker
110 0 [ 15] coreclr!DynamicHelperFixup
68 0 [ 16] coreclr!SigPointer::GetTypeHandleThrowing
6 0 [ 17] coreclr!__security_check_cookie
79 6 [ 16] coreclr!SigPointer::GetTypeHandleThrowing
114 85 [ 15] coreclr!DynamicHelperFixup
15 0 [ 16] coreclr!MethodTable::EnsureInstanceActive
13 0 [ 17] coreclr!DomainAssembly::EnsureLoadLevel
29 13 [ 16] coreclr!MethodTable::EnsureInstanceActive
134 127 [ 15] coreclr!DynamicHelperFixup
17 0 [ 16] coreclr!CEEInfo::getNewHelperStatic
7 0 [ 17] coreclr!TrackAllocationsEnabled
4 0 [ 18] coreclr!ETW::TypeSystemLog::IsHeapAllocEventEnabled
13 4 [ 17] coreclr!TrackAllocationsEnabled
23 17 [ 16] coreclr!CEEInfo::getNewHelperStatic
144 167 [ 15] coreclr!DynamicHelperFixup
11 0 [ 16] coreclr!DynamicHelpers::CreateHelper
9 0 [ 17] coreclr!LoaderAllocator::GetDynamicHelpersHeap
17 9 [ 16] coreclr!DynamicHelpers::CreateHelper
19 0 [ 17] coreclr!CodeFragmentHeap::RealAllocAlignedMem
29 0 [ 18] coreclr!CrstBase::Enter
10 0 [ 19] ntdll!RtlEnterCriticalSection
37 10 [ 18] coreclr!CrstBase::Enter
58 47 [ 17] coreclr!CodeFragmentHeap::RealAllocAlignedMem
1 0 [ 18] coreclr!operator delete
7 0 [ 18] coreclr!operator delete[]
1 0 [ 19] KERNEL32!HeapFreeStub
21 0 [ 19] ntdll!RtlFreeHeap
45 0 [ 20] ntdll!RtlpFreeHeapInternal
35 0 [ 21] ntdll!RtlpFreeHeap
19 0 [ 22] ntdll!RtlDebugFreeHeap
12 0 [ 23] ntdll!RtlpCheckHeapSignature
29 12 [ 22] ntdll!RtlDebugFreeHeap
10 0 [ 23] ntdll!RtlEnterCriticalSection
35 22 [ 22] ntdll!RtlDebugFreeHeap
18 0 [ 23] ntdll!RtlpValidateHeap
14 0 [ 24] ntdll!RtlpValidateHeapHeaders
37 14 [ 23] ntdll!RtlpValidateHeap
44 73 [ 22] ntdll!RtlDebugFreeHeap
56 0 [ 23] ntdll!RtlpValidateHeapEntry
54 0 [ 24] ntdll!RtlpCheckBusyBlockTail
28 0 [ 25] ntdll!RtlCompareMemory
64 28 [ 24] ntdll!RtlpCheckBusyBlockTail
74 92 [ 23] ntdll!RtlpValidateHeapEntry
57 239 [ 22] ntdll!RtlDebugFreeHeap
21 0 [ 23] ntdll!RtlFreeHeap
45 0 [ 24] ntdll!RtlpFreeHeapInternal
193 0 [ 25] ntdll!RtlpFreeHeap
16 0 [ 26] ntdll!RtlpFindEntry
119 0 [ 27] ntdll!RtlpHeapFindListLookupEntry
23 119 [ 26] ntdll!RtlpFindEntry
239 142 [ 25] ntdll!RtlpFreeHeap
60 0 [ 26] ntdll!RtlpHeapAddListEntry
270 202 [ 25] ntdll!RtlpFreeHeap
55 472 [ 24] ntdll!RtlpFreeHeapInternal
8 0 [ 25] ntdll!RtlpHpStackLoggingEnabled
69 480 [ 24] ntdll!RtlpFreeHeapInternal
28 549 [ 23] ntdll!RtlFreeHeap
61 816 [ 22] ntdll!RtlDebugFreeHeap
14 0 [ 23] ntdll!RtlpValidateHeapHeaders
64 830 [ 22] ntdll!RtlDebugFreeHeap
18 0 [ 23] ntdll!RtlpValidateHeap
14 0 [ 24] ntdll!RtlpValidateHeapHeaders
37 14 [ 23] ntdll!RtlpValidateHeap
86 881 [ 22] ntdll!RtlDebugFreeHeap
47 967 [ 21] ntdll!RtlpFreeHeap
55 1014 [ 20] ntdll!RtlpFreeHeapInternal
8 0 [ 21] ntdll!RtlpHpStackLoggingEnabled
69 1022 [ 20] ntdll!RtlpFreeHeapInternal
28 1091 [ 19] ntdll!RtlFreeHeap
10 1120 [ 18] coreclr!operator delete[]
80 1178 [ 17] coreclr!CodeFragmentHeap::RealAllocAlignedMem
22 0 [ 18] ntdll!RtlAllocateHeap
62 0 [ 18] ntdll!RtlpAllocateHeapInternal
37 0 [ 19] ntdll!RtlpAllocateHeap
19 0 [ 20] ntdll!RtlDebugAllocateHeap
12 0 [ 21] ntdll!RtlpCheckHeapSignature
44 12 [ 20] ntdll!RtlDebugAllocateHeap
10 0 [ 21] ntdll!RtlEnterCriticalSection
50 22 [ 20] ntdll!RtlDebugAllocateHeap
18 0 [ 21] ntdll!RtlpValidateHeap
14 0 [ 22] ntdll!RtlpValidateHeapHeaders
37 14 [ 21] ntdll!RtlpValidateHeap
54 73 [ 20] ntdll!RtlDebugAllocateHeap
22 0 [ 21] ntdll!RtlAllocateHeap
62 0 [ 21] ntdll!RtlpAllocateHeapInternal
103 0 [ 22] ntdll!RtlpAllocateHeap
10 0 [ 23] ntdll!RtlpGetLFHContext
271 10 [ 22] ntdll!RtlpAllocateHeap
66 0 [ 23] ntdll!RtlpHeapRemoveListEntry
295 76 [ 22] ntdll!RtlpAllocateHeap
22 0 [ 23] ntdll!RtlCompareMemoryUlong
383 98 [ 22] ntdll!RtlpAllocateHeap
7 0 [ 23] ntdll!RtlpGetExtraStuffPointer
424 105 [ 22] ntdll!RtlpAllocateHeap
89 529 [ 21] ntdll!RtlpAllocateHeapInternal
59 713 [ 20] ntdll!RtlDebugAllocateHeap
14 0 [ 21] ntdll!RtlpValidateHeapHeaders
80 727 [ 20] ntdll!RtlDebugAllocateHeap
7 0 [ 21] ntdll!RtlpGetExtraStuffPointer
128 734 [ 20] ntdll!RtlDebugAllocateHeap
48 862 [ 19] ntdll!RtlpAllocateHeap
89 910 [ 18] ntdll!RtlpAllocateHeapInternal
101 2199 [ 17] coreclr!CodeFragmentHeap::RealAllocAlignedMem
19 0 [ 18] ntdll!RtlLeaveCriticalSection
125 2218 [ 17] coreclr!CodeFragmentHeap::RealAllocAlignedMem
25 2352 [ 16] coreclr!DynamicHelpers::CreateHelper
22 0 [ 17] coreclr!ExecutableAllocator::MapRW
28 0 [ 18] coreclr!ClrEnterCriticalSection
10 0 [ 19] ntdll!RtlEnterCriticalSection
36 10 [ 18] coreclr!ClrEnterCriticalSection
47 46 [ 17] coreclr!ExecutableAllocator::MapRW
9 0 [ 18] coreclr!memcpy
56 55 [ 17] coreclr!ExecutableAllocator::MapRW
5 0 [ 18] coreclr!CrstBase::Leave
19 0 [ 19] ntdll!RtlLeaveCriticalSection
23 19 [ 18] coreclr!CrstBase::Leave
69 97 [ 17] coreclr!ExecutableAllocator::MapRW
39 2518 [ 16] coreclr!DynamicHelpers::CreateHelper
28 0 [ 17] coreclr!rel32UsingJumpStub
51 2546 [ 16] coreclr!DynamicHelpers::CreateHelper
16 0 [ 17] coreclr!memset
54 2562 [ 16] coreclr!DynamicHelpers::CreateHelper
19 0 [ 17] coreclr!ExecutableWriterHolderNoLog<unsigned char>::Unmap
28 0 [ 18] coreclr!ClrEnterCriticalSection
10 0 [ 19] ntdll!RtlEnterCriticalSection
36 10 [ 18] coreclr!ClrEnterCriticalSection
27 46 [ 17] coreclr!ExecutableWriterHolderNoLog<unsigned char>::Unmap
25 0 [ 18] coreclr!ExecutableAllocator::RemoveRWBlock
37 71 [ 17] coreclr!ExecutableWriterHolderNoLog<unsigned char>::Unmap
5 0 [ 18] coreclr!CrstBase::Leave
19 0 [ 19] ntdll!RtlLeaveCriticalSection
23 19 [ 18] coreclr!CrstBase::Leave
44 113 [ 17] coreclr!ExecutableWriterHolderNoLog<unsigned char>::Unmap
64 2719 [ 16] coreclr!DynamicHelpers::CreateHelper
163 2950 [ 15] coreclr!DynamicHelperFixup
6 0 [ 16] coreclr!__security_check_cookie
172 2956 [ 15] coreclr!DynamicHelperFixup
100 3181 [ 14] coreclr!DynamicHelperWorker
43 3281 [ 13] coreclr!DelayLoad_Helper
(e30.1774): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
00007ffa`d2121548 0000 add byte ptr [rax],al ds:00007ffa`d2121548=00
不过,为了日后继续查找原因方便,我又单独写了一段小程序,其功能简单到只打印Hello字符串,如下面列表所示:
{ static void Main()
{
Console.WriteLine("Hello");
System.Diagnostics.Debugger.Break();
Console.WriteLine("Hello");
Console.ReadKey();
}
调试时,首先g,直到第一次顺利打印出Hello,然后通过k命令找到返回Main的地址Core!BasicGrammar.Program.Main+0x2c,执行:
!u Core!BasicGrammar.Program.Main
此时观察Main方法,得到部分汇编代码如下:
00007ffc`7382194a b9a0049a02 mov ecx, 29A04A0h
00007ffc`7382194f ff15732e0d00 call qword ptr [7FFC738F47C8h]
00007ffc`73821955 90 nop
00007ffc`73821956 ff153c310d00 call qword ptr [7FFC738F4A98h]
00007ffc`7382195c 90 nop
00007ffc`7382195d b9a0049a02 mov ecx, 29A04A0h
00007ffc`73821962 ff15602e0d00 call qword ptr [7FFC738F47C8h]
00007ffc`73821968 90 nop
00007ffc`73821969 488d4de8 lea rcx, [rbp-18h]
00007ffc`7382196d ff151d270d00 call qword ptr [7FFC738F4090h]
00007ffc`73821973 90 nop
此时重新运行wt,因为Console.WriteLine此时已成功JIT,所以执行时不会再出现access violation,可以成功列出完整调用序列如下:
0:000> wt 00007ffc`73821968
2 0 [ 0] Core!BasicGrammar.Program.Main
4 0 [ 1] System_Console!System.Console.WriteLine
4 0 [ 2] System_Console
22 0 [ 2] coreclr!DelayLoad_MethodCall
14 0 [ 3] coreclr!ExternalMethodFixupWorker
1 0 [ 4] KERNEL32!GetLastErrorStub
3 0 [ 4] KERNELBASE!GetLastError
35 4 [ 3] coreclr!ExternalMethodFixupWorker
4 0 [ 4] coreclr!Frame::GetReturnAddress
11 0 [ 5] ntdll!LdrpDispatchUserCallTarget
4 0 [ 5] coreclr!TransitionFrame::GetReturnAddressPtr
11 0 [ 6] ntdll!LdrpDispatchUserCallTarget
2 0 [ 6] coreclr!MulticastFrame::GetFunction
7 13 [ 5] coreclr!TransitionFrame::GetReturnAddressPtr
11 31 [ 4] coreclr!Frame::GetReturnAddress
171 46 [ 3] coreclr!ExternalMethodFixupWorker
13 0 [ 4] coreclr!MethodDesc::CheckRestore
196 59 [ 3] coreclr!ExternalMethodFixupWorker
13 0 [ 4] coreclr!DomainAssembly::EnsureLoadLevel
216 72 [ 3] coreclr!ExternalMethodFixupWorker
13 0 [ 4] coreclr!DomainAssembly::EnsureLoadLevel
531 85 [ 3] coreclr!ExternalMethodFixupWorker
1 0 [ 4] KERNEL32!SetLastErrorStub
15 0 [ 4] ntdll!RtlSetLastWin32Error
6 0 [ 5] ntdll!_security_check_cookie
17 6 [ 4] ntdll!RtlSetLastWin32Error
541 109 [ 3] coreclr!ExternalMethodFixupWorker
39 650 [ 2] coreclr!DelayLoad_MethodCall
1 0 [ 2] coreclr!ExternalMethodFixupPatchLabel
1 0 [ 2] 0x00007ffc`738f00c0
2 0 [ 2] System_Console!System.Console.get_Out
1 0 [ 3] 0x00007ffc`73821558
1 0 [ 3] 0x00007ffc`73821562
7 2 [ 2] System_Console!System.Console.get_Out
9 704 [ 1] System_Console!System.Console.WriteLine
1 0 [ 2] 0x00007ffc`738211e0
1 0 [ 2] 0x00007ffc`738211e3
1 0 [ 2] 0x00007ffc`738211e7
16 0 [ 2] System_Private_CoreLib!System.IO.TextWriter.SyncTextWriter.WriteLine
34 0 [ 3] coreclr!JIT_MonEnterWorker_Portable
21 34 [ 2] System_Private_CoreLib!System.IO.TextWriter.SyncTextWriter.WriteLine
1 0 [ 3] 0x00007ffc`738211e0
1 0 [ 3] 0x00007ffc`738211e3
1 0 [ 3] 0x00007ffc`738211e7
54 0 [ 3] System_Private_CoreLib!System.IO.StreamWriter.WriteLine
1 0 [ 4] 0x00007ffc`738c1b78
24 0 [ 4] System_Private_CoreLib!System.Buffer.Memmove
106 25 [ 3] System_Private_CoreLib!System.IO.StreamWriter.WriteLine
1 0 [ 4] 0x00007ffc`738fbbe8
38 0 [ 4] System_Private_CoreLib!System.IO.StreamWriter.Flush
1 0 [ 5] 0x00007ffc`738211a0
1 0 [ 5] 0x00007ffc`738211a3
1 0 [ 5] 0x00007ffc`738211a7
8 0 [ 5] System_Console!System.Text.OSEncoding.GetMaxByteCount
1 0 [ 6] 0x00007ffc`73918f48
5 0 [ 6] System_Private_CoreLib!System.ArgumentOutOfRangeException.ThrowIfNegative
16 6 [ 5] System_Console!System.Text.OSEncoding.GetMaxByteCount
65 25 [ 4] System_Private_CoreLib!System.IO.StreamWriter.Flush
1 0 [ 5] 0x00007ffc`738211b0
1 0 [ 5] 0x00007ffc`738211b3
1 0 [ 5] 0x00007ffc`738211b7
29 0 [ 5] System_Private_CoreLib!System.Text.Encoder.GetBytes
1 0 [ 6] 0x00007ffc`738211c0
1 0 [ 6] 0x00007ffc`738211c3
1 0 [ 6] 0x00007ffc`738211c7
18 0 [ 6] System_Console!System.Text.OSEncoder.GetBytes
1 0 [ 7] 0x00007ffc`73919650
5 0 [ 7] System_Private_CoreLib!System.ArgumentNullException.ThrowIfNull
22 6 [ 6] System_Console!System.Text.OSEncoder.GetBytes
1 0 [ 7] 0x00007ffc`73919650
5 0 [ 7] System_Private_CoreLib!System.ArgumentNullException.ThrowIfNull
26 12 [ 6] System_Console!System.Text.OSEncoder.GetBytes
1 0 [ 7] 0x00007ffc`73918f48
5 0 [ 7] System_Private_CoreLib!System.ArgumentOutOfRangeException.ThrowIfNegative
30 18 [ 6] System_Console!System.Text.OSEncoder.GetBytes
1 0 [ 7] 0x00007ffc`73918f48
5 0 [ 7] System_Private_CoreLib!System.ArgumentOutOfRangeException.ThrowIfNegative
41 24 [ 6] System_Console!System.Text.OSEncoder.GetBytes
4 0 [ 7] System_Console
22 0 [ 7] coreclr!DelayLoad_MethodCall
14 0 [ 8] coreclr!ExternalMethodFixupWorker
1 0 [ 9] KERNEL32!GetLastErrorStub
3 0 [ 9] KERNELBASE!GetLastError
35 4 [ 8] coreclr!ExternalMethodFixupWorker
4 0 [ 9] coreclr!Frame::GetReturnAddress
11 0 [ 10] ntdll!LdrpDispatchUserCallTarget
4 0 [ 10] coreclr!TransitionFrame::GetReturnAddressPtr
11 0 [ 11] ntdll!LdrpDispatchUserCallTarget
2 0 [ 11] coreclr!MulticastFrame::GetFunction
7 13 [ 10] coreclr!TransitionFrame::GetReturnAddressPtr
11 31 [ 9] coreclr!Frame::GetReturnAddress
141 46 [ 8] coreclr!ExternalMethodFixupWorker
17 0 [ 9] coreclr!CorSigUncompressBigData
158 63 [ 8] coreclr!ExternalMethodFixupWorker
20 0 [ 9] coreclr!MemberLoader::GetDescFromMemberRef
3 0 [ 10] coreclr!LookupMap<unsigned __int64>::GetElement
7 0 [ 11] coreclr!LookupMapBase::GetElementPtr
18 7 [ 10] coreclr!LookupMap<unsigned __int64>::GetElement
30 25 [ 9] coreclr!MemberLoader::GetDescFromMemberRef
13 0 [ 10] coreclr!MethodDesc::CheckRestore
47 38 [ 9] coreclr!MemberLoader::GetDescFromMemberRef
166 148 [ 8] coreclr!ExternalMethodFixupWorker
26 0 [ 9] coreclr!MethodDesc::EnsureActive
13 0 [ 10] coreclr!DomainAssembly::EnsureLoadLevel
45 13 [ 9] coreclr!MethodDesc::EnsureActive
471 206 [ 8] coreclr!ExternalMethodFixupWorker
1 0 [ 9] KERNEL32!SetLastErrorStub
15 0 [ 9] ntdll!RtlSetLastWin32Error
6 0 [ 10] ntdll!_security_check_cookie
17 6 [ 9] ntdll!RtlSetLastWin32Error
481 230 [ 8] coreclr!ExternalMethodFixupWorker
39 711 [ 7] coreclr!DelayLoad_MethodCall
1 0 [ 7] coreclr!ExternalMethodFixupPatchLabel
1 0 [ 7] 0x00007ffc`737a2370
6 0 [ 7] System_Private_CoreLib!System.Char.IsHighSurrogate
58 786 [ 6] System_Console!System.Text.OSEncoder.GetBytes
1 0 [ 7] 0x00007ffc`73821150
1 0 [ 7] 0x00007ffc`73821153
1 0 [ 7] 0x00007ffc`73821157
2 0 [ 7] System_Private_CoreLib!System.Text.Encoding.get_CodePage
64 791 [ 6] System_Console!System.Text.OSEncoder.GetBytes
4 0 [ 7] System_Console
22 0 [ 7] coreclr!DelayLoad_MethodCall
14 0 [ 8] coreclr!ExternalMethodFixupWorker
1 0 [ 9] KERNEL32!GetLastErrorStub
3 0 [ 9] KERNELBASE!GetLastError
35 4 [ 8] coreclr!ExternalMethodFixupWorker
4 0 [ 9] coreclr!Frame::GetReturnAddress
11 0 [ 10] ntdll!LdrpDispatchUserCallTarget
4 0 [ 10] coreclr!TransitionFrame::GetReturnAddressPtr
11 0 [ 11] ntdll!LdrpDispatchUserCallTarget
2 0 [ 11] coreclr!MulticastFrame::GetFunction
7 13 [ 10] coreclr!TransitionFrame::GetReturnAddressPtr
11 31 [ 9] coreclr!Frame::GetReturnAddress
137 46 [ 8] coreclr!ExternalMethodFixupWorker
17 0 [ 9] coreclr!CorSigUncompressBigData
170 63 [ 8] coreclr!ExternalMethodFixupWorker
13 0 [ 9] coreclr!MethodDesc::CheckRestore
195 76 [ 8] coreclr!ExternalMethodFixupWorker
13 0 [ 9] coreclr!DomainAssembly::EnsureLoadLevel
215 89 [ 8] coreclr!ExternalMethodFixupWorker
13 0 [ 9] coreclr!DomainAssembly::EnsureLoadLevel
530 102 [ 8] coreclr!ExternalMethodFixupWorker
1 0 [ 9] KERNEL32!SetLastErrorStub
15 0 [ 9] ntdll!RtlSetLastWin32Error
6 0 [ 10] ntdll!_security_check_cookie
17 6 [ 9] ntdll!RtlSetLastWin32Error
540 126 [ 8] coreclr!ExternalMethodFixupWorker
39 666 [ 7] coreclr!DelayLoad_MethodCall
1 0 [ 7] coreclr!ExternalMethodFixupPatchLabel
1 0 [ 7] 0x00007ffc`738f8138
26 0 [ 7] System_Console!System.Text.OSEncoding.WideCharToMultiByte
22 0 [ 8] coreclr!JIT_PInvokeBegin
32 22 [ 7] System_Console!System.Text.OSEncoding.WideCharToMultiByte
1 0 [ 8] KERNEL32!WideCharToMultiByteStub
88 0 [ 8] KERNELBASE!WideCharToMultiByte
138 0 [ 9] KERNELBASE!GetMBNoDefault
98 138 [ 8] KERNELBASE!WideCharToMultiByte
35 259 [ 7] System_Console!System.Text.OSEncoding.WideCharToMultiByte
12 0 [ 8] coreclr!JIT_PInvokeEnd
48 271 [ 7] System_Console!System.Text.OSEncoding.WideCharToMultiByte
76 1821 [ 6] System_Console!System.Text.OSEncoder.GetBytes
33 1900 [ 5] System_Private_CoreLib!System.Text.Encoder.GetBytes
79 1961 [ 4] System_Private_CoreLib!System.IO.StreamWriter.Flush
1 0 [ 5] 0x00007ffc`738211f0
1 0 [ 5] 0x00007ffc`738211f3
1 0 [ 5] 0x00007ffc`738211f7
5 0 [ 5] System_Console!System.ConsolePal.WindowsConsoleStream.Write
4 0 [ 6] System_Console
22 0 [ 6] coreclr!DelayLoad_MethodCall
14 0 [ 7] coreclr!ExternalMethodFixupWorker
1 0 [ 8] KERNEL32!GetLastErrorStub
3 0 [ 8] KERNELBASE!GetLastError
35 4 [ 7] coreclr!ExternalMethodFixupWorker
4 0 [ 8] coreclr!Frame::GetReturnAddress
11 0 [ 9] ntdll!LdrpDispatchUserCallTarget
4 0 [ 9] coreclr!TransitionFrame::GetReturnAddressPtr
11 0 [ 10] ntdll!LdrpDispatchUserCallTarget
2 0 [ 10] coreclr!MulticastFrame::GetFunction
7 13 [ 9] coreclr!TransitionFrame::GetReturnAddressPtr
11 31 [ 8] coreclr!Frame::GetReturnAddress
137 46 [ 7] coreclr!ExternalMethodFixupWorker
17 0 [ 8] coreclr!CorSigUncompressBigData
170 63 [ 7] coreclr!ExternalMethodFixupWorker
13 0 [ 8] coreclr!MethodDesc::CheckRestore
195 76 [ 7] coreclr!ExternalMethodFixupWorker
13 0 [ 8] coreclr!DomainAssembly::EnsureLoadLevel
227 89 [ 7] coreclr!ExternalMethodFixupWorker
13 0 [ 8] coreclr!DomainAssembly::EnsureLoadLevel
542 102 [ 7] coreclr!ExternalMethodFixupWorker
1 0 [ 8] KERNEL32!SetLastErrorStub
15 0 [ 8] ntdll!RtlSetLastWin32Error
6 0 [ 9] ntdll!_security_check_cookie
17 6 [ 8] ntdll!RtlSetLastWin32Error
552 126 [ 7] coreclr!ExternalMethodFixupWorker
39 678 [ 6] coreclr!DelayLoad_MethodCall
1 0 [ 6] coreclr!ExternalMethodFixupPatchLabel
1 0 [ 6] 0x00007ffc`738f94b8
13 0 [ 6] System_Console!System.ConsolePal.WindowsConsoleStream.WriteFileNative
4 0 [ 7] System_Console
22 0 [ 7] coreclr!DelayLoad_MethodCall
14 0 [ 8] coreclr!ExternalMethodFixupWorker
1 0 [ 9] KERNEL32!GetLastErrorStub
3 0 [ 9] KERNELBASE!GetLastError
35 4 [ 8] coreclr!ExternalMethodFixupWorker
4 0 [ 9] coreclr!Frame::GetReturnAddress
11 0 [ 10] ntdll!LdrpDispatchUserCallTarget
4 0 [ 10] coreclr!TransitionFrame::GetReturnAddressPtr
11 0 [ 11] ntdll!LdrpDispatchUserCallTarget
2 0 [ 11] coreclr!MulticastFrame::GetFunction
7 13 [ 10] coreclr!TransitionFrame::GetReturnAddressPtr
11 31 [ 9] coreclr!Frame::GetReturnAddress
147 46 [ 8] coreclr!ExternalMethodFixupWorker
29 0 [ 9] coreclr!ZapSig::DecodeMethod
19 0 [ 10] coreclr!CorSigUncompressData
49 19 [ 9] coreclr!ZapSig::DecodeMethod
19 0 [ 10] coreclr!CorSigUncompressData
76 38 [ 9] coreclr!ZapSig::DecodeMethod
20 0 [ 10] coreclr!MemberLoader::GetDescFromMemberRef
3 0 [ 11] coreclr!LookupMap<unsigned __int64>::GetElement
7 0 [ 12] coreclr!LookupMapBase::GetElementPtr
18 7 [ 11] coreclr!LookupMap<unsigned __int64>::GetElement
30 25 [ 10] coreclr!MemberLoader::GetDescFromMemberRef
11 0 [ 11] ntdll!LdrpDispatchUserCallTarget
3 0 [ 11] coreclr!Module::GetMDImport
37 39 [ 10] coreclr!MemberLoader::GetDescFromMemberRef
11 0 [ 11] ntdll!LdrpDispatchUserCallTarget
25 0 [ 11] coreclr!MDInternalRO::GetParentOfMemberRef
56 75 [ 10] coreclr!MemberLoader::GetDescFromMemberRef
11 0 [ 11] ntdll!LdrpDispatchUserCallTarget
12 0 [ 11] coreclr!MDInternalRO::GetTypeSpecFromToken
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
12 0 [ 12] coreclr!MDInternalRO::IsValidToken
35 23 [ 11] coreclr!MDInternalRO::GetTypeSpecFromToken
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
31 0 [ 12] coreclr!StgBlobPoolReadOnly::GetBlob
45 65 [ 11] coreclr!MDInternalRO::GetTypeSpecFromToken
77 196 [ 10] coreclr!MemberLoader::GetDescFromMemberRef
85 0 [ 11] coreclr!SigPointer::GetTypeHandleThrowing
40 0 [ 12] coreclr!SigPointer::GetGenericInstType
5 0 [ 13] coreclr!CorSigUncompressToken
24 0 [ 14] coreclr!CorSigUncompressData
18 24 [ 13] coreclr!CorSigUncompressToken
69 42 [ 12] coreclr!SigPointer::GetGenericInstType
73 0 [ 13] coreclr!ClassLoader::LoadTypeDefOrRefThrowing
105 115 [ 12] coreclr!SigPointer::GetGenericInstType
130 220 [ 11] coreclr!SigPointer::GetTypeHandleThrowing
19 0 [ 12] coreclr!CorSigUncompressData
151 239 [ 11] coreclr!SigPointer::GetTypeHandleThrowing
14 0 [ 12] coreclr!__chkstk
191 253 [ 11] coreclr!SigPointer::GetTypeHandleThrowing
64 0 [ 12] coreclr!SigPointer::GetTypeHandleThrowing
6 0 [ 13] coreclr!__security_check_cookie
75 6 [ 12] coreclr!SigPointer::GetTypeHandleThrowing
201 334 [ 11] coreclr!SigPointer::GetTypeHandleThrowing
29 0 [ 12] coreclr!SigParser::SkipExactlyOne
249 363 [ 11] coreclr!SigPointer::GetTypeHandleThrowing
63 0 [ 12] coreclr!ClassLoader::LoadTypeDefThrowing
6 0 [ 13] coreclr!__security_check_cookie
73 6 [ 12] coreclr!ClassLoader::LoadTypeDefThrowing
327 442 [ 11] coreclr!SigPointer::GetTypeHandleThrowing
7 0 [ 12] coreclr!TypeHandle::GetLoaderModule
479 449 [ 11] coreclr!SigPointer::GetTypeHandleThrowing
6 0 [ 12] coreclr!__security_check_cookie
490 455 [ 11] coreclr!SigPointer::GetTypeHandleThrowing
96 1141 [ 10] coreclr!MemberLoader::GetDescFromMemberRef
11 0 [ 11] ntdll!LdrpDispatchUserCallTarget
38 0 [ 11] coreclr!MDInternalRO::GetNameAndSigOfMemberRef
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
31 0 [ 12] coreclr!StgBlobPoolReadOnly::GetBlob
61 42 [ 11] coreclr!MDInternalRO::GetNameAndSigOfMemberRef
126 1255 [ 10] coreclr!MemberLoader::GetDescFromMemberRef
38 0 [ 11] coreclr!MemberLoader::FindMethod
45 0 [ 12] coreclr!SimpleRWLock::EnterRead
174 45 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
18 0 [ 12] coreclr!MethodTable::MethodDataObject::GetNumMethods
188 74 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
23 0 [ 12] coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
245 108 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
22 0 [ 12] coreclr!MDInternalRO::GetNameOfMethodDef
254 141 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
9 0 [ 12] ucrtbase!strcmp
268 161 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
23 0 [ 12] coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
325 195 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
22 0 [ 12] coreclr!MDInternalRO::GetNameOfMethodDef
334 228 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
42 0 [ 12] ucrtbase!strcmp
348 281 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
23 0 [ 12] coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
405 315 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
22 0 [ 12] coreclr!MDInternalRO::GetNameOfMethodDef
414 348 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
9 0 [ 12] ucrtbase!strcmp
428 368 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
23 0 [ 12] coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
485 402 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
22 0 [ 12] coreclr!MDInternalRO::GetNameOfMethodDef
494 435 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
9 0 [ 12] ucrtbase!strcmp
508 455 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
23 0 [ 12] coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
565 489 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
22 0 [ 12] coreclr!MDInternalRO::GetNameOfMethodDef
574 522 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
9 0 [ 12] ucrtbase!strcmp
588 542 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
23 0 [ 12] coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
645 576 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
22 0 [ 12] coreclr!MDInternalRO::GetNameOfMethodDef
654 609 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
9 0 [ 12] ucrtbase!strcmp
668 629 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
23 0 [ 12] coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
725 663 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
22 0 [ 12] coreclr!MDInternalRO::GetNameOfMethodDef
734 696 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
9 0 [ 12] ucrtbase!strcmp
748 716 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
23 0 [ 12] coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
805 750 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
22 0 [ 12] coreclr!MDInternalRO::GetNameOfMethodDef
814 783 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
9 0 [ 12] ucrtbase!strcmp
828 803 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
23 0 [ 12] coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
885 837 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
22 0 [ 12] coreclr!MDInternalRO::GetNameOfMethodDef
894 870 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
9 0 [ 12] ucrtbase!strcmp
908 890 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
23 0 [ 12] coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
965 924 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
22 0 [ 12] coreclr!MDInternalRO::GetNameOfMethodDef
974 957 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
78 0 [ 12] ucrtbase!strcmp
1050 1046 [ 11] coreclr!MemberLoader::FindMethod
11 0 [ 12] ntdll!LdrpDispatchUserCallTarget
28 0 [ 12] coreclr!MDInternalRO::GetSigOfMethodDef
11 0 [ 13] ntdll!LdrpDispatchUserCallTarget
31 0 [ 13] coreclr!StgBlobPoolReadOnly::GetBlob
40 42 [ 12] coreclr!MDInternalRO::GetSigOfMethodDef
1088 1139 [ 11] coreclr!MemberLoader::FindMethod
91 0 [ 12] coreclr!MetaSig::CompareMethodSigs
10 0 [ 13] coreclr!TokenPairList::TokenPairList
109 10 [ 12] coreclr!MetaSig::CompareMethodSigs
73 0 [ 13] coreclr!MetaSig::CompareElementType
10 0 [ 14] coreclr!CorSigUncompressToken_EndPtr
5 0 [ 15] coreclr!CorSigUncompressToken
19 0 [ 16] coreclr!CorSigUncompressData
18 19 [ 15] coreclr!CorSigUncompressToken
19 37 [ 14] coreclr!CorSigUncompressToken_EndPtr
79 56 [ 13] coreclr!MetaSig::CompareElementType
10 0 [ 14] coreclr!CorSigUncompressToken_EndPtr
5 0 [ 15] coreclr!CorSigUncompressToken
24 0 [ 16] coreclr!CorSigUncompressData
18 24 [ 15] coreclr!CorSigUncompressToken
19 42 [ 14] coreclr!CorSigUncompressToken_EndPtr
92 117 [ 13] coreclr!MetaSig::CompareElementType
29 0 [ 14] coreclr!MetaSig::CompareTypeDefOrRefOrSpec
20 0 [ 15] coreclr!CompareTypeTokens
11 0 [ 16] ntdll!LdrpDispatchUserCallTarget
3 0 [ 16] coreclr!Module::GetMDImport
27 14 [ 15] coreclr!CompareTypeTokens
11 0 [ 16] ntdll!LdrpDispatchUserCallTarget
26 0 [ 16] coreclr!MDInternalRO::IsValidToken
33 51 [ 15] coreclr!CompareTypeTokens
11 0 [ 16] ntdll!LdrpDispatchUserCallTarget
3 0 [ 16] coreclr!Module::GetMDImport
40 65 [ 15] coreclr!CompareTypeTokens
11 0 [ 16] ntdll!LdrpDispatchUserCallTarget
25 0 [ 16] coreclr!MDInternalRO::IsValidToken
56 101 [ 15] coreclr!CompareTypeTokens
11 0 [ 16] ntdll!LdrpDispatchUserCallTarget
30 0 [ 16] coreclr!MDInternalRO::GetNameOfTypeRef
75 142 [ 15] coreclr!CompareTypeTokens
11 0 [ 16] ntdll!LdrpDispatchUserCallTarget
42 0 [ 16] coreclr!MDInternalRO::GetNameOfTypeDef
81 195 [ 15] coreclr!CompareTypeTokens
108 0 [ 16] ucrtbase!strcmp
86 303 [ 15] coreclr!CompareTypeTokens
59 0 [ 16] ucrtbase!strcmp
98 362 [ 15] coreclr!CompareTypeTokens
11 0 [ 16] ntdll!LdrpDispatchUserCallTarget
23 0 [ 16] coreclr!MDInternalRO::GetResolutionScopeOfTypeRef
139 396 [ 15] coreclr!CompareTypeTokens
40 0 [ 16] coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
15 0 [ 17] coreclr!Assembly::FindModuleByTypeRef
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
3 0 [ 18] coreclr!Module::GetMDImport
26 14 [ 17] coreclr!Assembly::FindModuleByTypeRef
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
26 0 [ 18] coreclr!MDInternalRO::IsValidToken
36 51 [ 17] coreclr!Assembly::FindModuleByTypeRef
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
23 0 [ 18] coreclr!MDInternalRO::GetResolutionScopeOfTypeRef
51 85 [ 17] coreclr!Assembly::FindModuleByTypeRef
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
30 0 [ 18] coreclr!MDInternalRO::IsValidToken
65 126 [ 17] coreclr!Assembly::FindModuleByTypeRef
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
3 0 [ 18] coreclr!Module::GetMDImport
80 140 [ 17] coreclr!Assembly::FindModuleByTypeRef
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
29 0 [ 18] coreclr!MDInternalRO::GetAssemblyRefProps
11 0 [ 19] ntdll!LdrpDispatchUserCallTarget
31 0 [ 19] coreclr!StgBlobPoolReadOnly::GetBlob
64 42 [ 18] coreclr!MDInternalRO::GetAssemblyRefProps
96 257 [ 17] coreclr!Assembly::FindModuleByTypeRef
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
70 0 [ 18] coreclr!Module::GetAssemblyIfLoaded
107 338 [ 17] coreclr!Assembly::FindModuleByTypeRef
47 445 [ 16] coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
11 0 [ 17] ntdll!LdrpDispatchUserCallTarget
3 0 [ 17] coreclr!Module::GetMDImport
55 459 [ 16] coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
11 0 [ 17] ntdll!LdrpDispatchUserCallTarget
30 0 [ 17] coreclr!MDInternalRO::GetNameOfTypeRef
97 500 [ 16] coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
47 0 [ 17] coreclr!ClassLoader::GetClassValue
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
3 0 [ 18] coreclr!Module::GetMDImport
54 14 [ 17] coreclr!ClassLoader::GetClassValue
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
23 0 [ 18] coreclr!MDInternalRO::GetResolutionScopeOfTypeRef
384 48 [ 17] coreclr!ClassLoader::GetClassValue
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
41 0 [ 18] coreclr!MDInternalRO::GetExportedTypeProps
397 100 [ 17] coreclr!ClassLoader::GetClassValue
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
13 0 [ 18] coreclr!ConstructKeyCallbackCompare::UseKeys
102 0 [ 19] ucrtbase!strcmp
20 102 [ 18] coreclr!ConstructKeyCallbackCompare::UseKeys
57 0 [ 19] ucrtbase!strcmp
29 159 [ 18] coreclr!ConstructKeyCallbackCompare::UseKeys
418 299 [ 17] coreclr!ClassLoader::GetClassValue
122 1217 [ 16] coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
22 0 [ 17] coreclr!Assembly::FindModuleByExportedType
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
41 0 [ 18] coreclr!MDInternalRO::GetExportedTypeProps
29 52 [ 17] coreclr!Assembly::FindModuleByExportedType
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
30 0 [ 18] coreclr!MDInternalRO::IsValidToken
44 93 [ 17] coreclr!Assembly::FindModuleByExportedType
11 0 [ 18] ntdll!LdrpDispatchUserCallTarget
87 0 [ 18] coreclr!Module::LoadAssemblyImpl
51 191 [ 17] coreclr!Assembly::FindModuleByExportedType
164 1459 [ 16] coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
35 0 [ 17] coreclr!ClassLoader::GetClassValue
36 0 [ 18] coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
11 0 [ 19] ntdll!LdrpDispatchUserCallTarget
3 0 [ 19] coreclr!Module::GetMDImport
53 14 [ 18] coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
11 0 [ 19] ntdll!LdrpDispatchUserCallTarget
30 0 [ 19] coreclr!MDInternalRO::GetNameOfTypeRef
61 55 [ 18] coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
11 0 [ 19] ntdll!LdrpDispatchUserCallTarget
23 0 [ 19] coreclr!MDInternalRO::GetResolutionScopeOfTypeRef
724 89 [ 18] coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
11 0 [ 19] ntdll!LdrpDispatchUserCallTarget
3 0 [ 19] coreclr!Module::GetMDImport
737 103 [ 18] coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
11 0 [ 19] ntdll!LdrpDispatchUserCallTarget
30 0 [ 19] coreclr!MDInternalRO::GetNameOfTypeRef
751 144 [ 18] coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
11 0 [ 19] ntdll!LdrpDispatchUserCallTarget
42 0 [ 19] coreclr!MDInternalRO::GetNameOfTypeDef
757 197 [ 18] coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
108 0 [ 19] ucrtbase!strcmp
763 305 [ 18] coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
59 0 [ 19] ucrtbase!strcmp
777 364 [ 18] coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
11 0 [ 19] ntdll!LdrpDispatchUserCallTarget
23 0 [ 19] coreclr!MDInternalRO::GetResolutionScopeOfTypeRef
821 398 [ 18] coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
6 0 [ 19] coreclr!__security_check_cookie
831 404 [ 18] coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
58 1235 [ 17] coreclr!ClassLoader::GetClassValue
200 2752 [ 16] coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
148 3348 [ 15] coreclr!CompareTypeTokens
21 0 [ 16] coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
11 0 [ 17] ntdll!LdrpDispatchUserCallTarget
2 0 [ 17] coreclr!Module::IsFullModule
41 13 [ 16] coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
156 3402 [ 15] coreclr!CompareTypeTokens
23 0 [ 16] coreclr!CompareTypeTokens
167 3425 [ 15] coreclr!CompareTypeTokens
39 3592 [ 14] coreclr!MetaSig::CompareTypeDefOrRefOrSpec
149 3748 [ 13] coreclr!MetaSig::CompareElementType
127 0 [ 14] coreclr!MetaSig::CompareElementType
164 3875 [ 13] coreclr!MetaSig::CompareElementType
126 4049 [ 12] coreclr!MetaSig::CompareMethodSigs
1106 5314 [ 11] coreclr!MemberLoader::FindMethod
132 7675 [ 10] coreclr!MemberLoader::GetDescFromMemberRef
13 0 [ 11] coreclr!MethodDesc::CheckRestore
156 7688 [ 10] coreclr!MemberLoader::GetDescFromMemberRef
123 7882 [ 9] coreclr!ZapSig::DecodeMethod
115 0 [ 10] coreclr!MethodDesc::FindOrCreateAssociatedMethodDesc
67 0 [ 11] coreclr!ExecutionManager::FindCodeRangeWithLock
128 67 [ 10] coreclr!MethodDesc::FindOrCreateAssociatedMethodDesc
11 0 [ 11] ntdll!LdrpDispatchUserCallTarget
17 0 [ 11] coreclr!EEJitManager::JitCodeToMethodInfo
156 95 [ 10] coreclr!MethodDesc::FindOrCreateAssociatedMethodDesc
13 0 [ 11] coreclr!MethodDesc::CheckRestore
173 108 [ 10] coreclr!MethodDesc::FindOrCreateAssociatedMethodDesc
6 0 [ 11] coreclr!__security_check_cookie
183 114 [ 10] coreclr!MethodDesc::FindOrCreateAssociatedMethodDesc
133 8179 [ 9] coreclr!ZapSig::DecodeMethod
6 0 [ 10] coreclr!__security_check_cookie
143 8185 [ 9] coreclr!ZapSig::DecodeMethod
182 8374 [ 8] coreclr!ExternalMethodFixupWorker
13 0 [ 9] coreclr!DomainAssembly::EnsureLoadLevel
208 8387 [ 8] coreclr!ExternalMethodFixupWorker
15 0 [ 9] coreclr!MethodTable::EnsureInstanceActive
13 0 [ 10] coreclr!DomainAssembly::EnsureLoadLevel
29 13 [ 9] coreclr!MethodTable::EnsureInstanceActive
517 8429 [ 8] coreclr!ExternalMethodFixupWorker
17 0 [ 9] coreclr!MethodTable::GetSlotPtrRaw
549 8446 [ 8] coreclr!ExternalMethodFixupWorker
1 0 [ 9] KERNEL32!SetLastErrorStub
15 0 [ 9] ntdll!RtlSetLastWin32Error
6 0 [ 10] ntdll!_security_check_cookie
17 6 [ 9] ntdll!RtlSetLastWin32Error
559 8470 [ 8] coreclr!ExternalMethodFixupWorker
39 9029 [ 7] coreclr!DelayLoad_MethodCall
1 0 [ 7] coreclr!ExternalMethodFixupPatchLabel
1 0 [ 7] 0x00007ffc`738c87b0
1 0 [ 7] 0x00007ffc`73930a98
1 0 [ 7] 0x00007ffc`73930a9f
1 0 [ 7] 0x00007ffc`73930aa2
1 0 [ 7] 0x00007ffc`73930aa4
5 0 [ 7] System_Private_CoreLib!System.ReadOnlySpan`1.GetPinnableReference
23 9083 [ 6] System_Console!System.ConsolePal.WindowsConsoleStream.WriteFileNative
1 0 [ 7] 0x00007ffc`738f2c70
1 0 [ 7] 0x00007ffc`73930720
1 0 [ 7] 0x00007ffc`73930727
1 0 [ 7] 0x00007ffc`7393072a
1 0 [ 7] 0x00007ffc`7393072c
19 0 [ 7] System_Console!Interop.Kernel32.WriteFile
1 0 [ 8] 0x00007ffc`738fa7a8
1 0 [ 8] 0x00007ffc`73930738
1 0 [ 8] 0x00007ffc`7393073f
1 0 [ 8] 0x00007ffc`73930742
1 0 [ 8] 0x00007ffc`73930744
4 0 [ 8] System_Private_CoreLib!System.Runtime.InteropServices.Marshal.SetLastSystemError
1 0 [ 9] KERNEL32!SetLastErrorStub
15 0 [ 9] ntdll!RtlSetLastWin32Error
6 0 [ 10] ntdll!_security_check_cookie
17 6 [ 9] ntdll!RtlSetLastWin32Error
10 24 [ 8] System_Private_CoreLib!System.Runtime.InteropServices.Marshal.SetLastSystemError
31 39 [ 7] System_Console!Interop.Kernel32.WriteFile
22 0 [ 8] coreclr!JIT_PInvokeBegin
37 61 [ 7] System_Console!Interop.Kernel32.WriteFile
1 0 [ 8] KERNEL32!WriteFile
29 0 [ 8] KERNELBASE!WriteFile
6 0 [ 9] ntdll!NtWriteFile
>> More than one level popped 8 -> 8
45 6 [ 8] KERNELBASE!WriteFile
40 113 [ 7] System_Console!Interop.Kernel32.WriteFile
12 0 [ 8] coreclr!JIT_PInvokeEnd
41 125 [ 7] System_Console!Interop.Kernel32.WriteFile
1 0 [ 8] 0x00007ffc`738fa790
1 0 [ 8] 0x00007ffc`73930750
1 0 [ 8] 0x00007ffc`73930757
1 0 [ 8] 0x00007ffc`7393075a
1 0 [ 8] 0x00007ffc`7393075c
7 0 [ 8] System_Private_CoreLib!System.Runtime.InteropServices.Marshal.GetLastSystemError
1 0 [ 9] KERNEL32!GetLastErrorStub
3 0 [ 9] KERNELBASE!GetLastError
11 4 [ 8] System_Private_CoreLib!System.Runtime.InteropServices.Marshal.GetLastSystemError
45 145 [ 7] System_Console!Interop.Kernel32.WriteFile
7 0 [ 8] coreclr!MarshalNative::SetLastPInvokeError
56 152 [ 7] System_Console!Interop.Kernel32.WriteFile
36 9296 [ 6] System_Console!System.ConsolePal.WindowsConsoleStream.WriteFileNative
9 10055 [ 5] System_Console!System.ConsolePal.WindowsConsoleStream.Write
85 12028 [ 4] System_Private_CoreLib!System.IO.StreamWriter.Flush
1 0 [ 5] 0x00007ffc`738211d0
1 0 [ 5] 0x00007ffc`738211d3
1 0 [ 5] 0x00007ffc`738211d7
1 0 [ 5] 0x00007ffc`73919e00
1 0 [ 5] 0x00007ffc`739309d8
1 0 [ 5] 0x00007ffc`739309df
1 0 [ 5] 0x00007ffc`739309e2
1 0 [ 5] 0x00007ffc`739309e4
6 0 [ 5] System_Console!System.ConsolePal.WindowsConsoleStream.Flush
99 12042 [ 4] System_Private_CoreLib!System.IO.StreamWriter.Flush
120 12167 [ 3] System_Private_CoreLib!System.IO.StreamWriter.WriteLine
24 12324 [ 2] System_Private_CoreLib!System.IO.TextWriter.SyncTextWriter.WriteLine
33 0 [ 3] coreclr!JIT_MonExitWorker_Portable
30 12357 [ 2] System_Private_CoreLib!System.IO.TextWriter.SyncTextWriter.WriteLine
13 13094 [ 1] System_Console!System.Console.WriteLine
13109 instructions were executed in 13108 events (0 from other threads)
Function Name Invocations MinInst MaxInst AvgInst
0x00007ffc`737a2370 1 1 1 1
0x00007ffc`73821150 1 1 1 1
0x00007ffc`73821153 1 1 1 1
0x00007ffc`73821157 1 1 1 1
0x00007ffc`738211a0 1 1 1 1
0x00007ffc`738211a3 1 1 1 1
0x00007ffc`738211a7 1 1 1 1
0x00007ffc`738211b0 1 1 1 1
0x00007ffc`738211b3 1 1 1 1
0x00007ffc`738211b7 1 1 1 1
0x00007ffc`738211c0 1 1 1 1
0x00007ffc`738211c3 1 1 1 1
0x00007ffc`738211c7 1 1 1 1
0x00007ffc`738211d0 1 1 1 1
0x00007ffc`738211d3 1 1 1 1
0x00007ffc`738211d7 1 1 1 1
0x00007ffc`738211e0 2 1 1 1
0x00007ffc`738211e3 2 1 1 1
0x00007ffc`738211e7 2 1 1 1
0x00007ffc`738211f0 1 1 1 1
0x00007ffc`738211f3 1 1 1 1
0x00007ffc`738211f7 1 1 1 1
0x00007ffc`73821558 1 1 1 1
0x00007ffc`73821562 1 1 1 1
0x00007ffc`738c1b78 1 1 1 1
0x00007ffc`738c87b0 1 1 1 1
0x00007ffc`738f00c0 1 1 1 1
0x00007ffc`738f2c70 1 1 1 1
0x00007ffc`738f8138 1 1 1 1
0x00007ffc`738f94b8 1 1 1 1
0x00007ffc`738fa790 1 1 1 1
0x00007ffc`738fa7a8 1 1 1 1
0x00007ffc`738fbbe8 1 1 1 1
0x00007ffc`73918f48 3 1 1 1
0x00007ffc`73919650 2 1 1 1
0x00007ffc`73919e00 1 1 1 1
0x00007ffc`73930720 1 1 1 1
0x00007ffc`73930727 1 1 1 1
0x00007ffc`7393072a 1 1 1 1
0x00007ffc`7393072c 1 1 1 1
0x00007ffc`73930738 1 1 1 1
0x00007ffc`7393073f 1 1 1 1
0x00007ffc`73930742 1 1 1 1
0x00007ffc`73930744 1 1 1 1
0x00007ffc`73930750 1 1 1 1
0x00007ffc`73930757 1 1 1 1
0x00007ffc`7393075a 1 1 1 1
0x00007ffc`7393075c 1 1 1 1
0x00007ffc`739309d8 1 1 1 1
0x00007ffc`739309df 1 1 1 1
0x00007ffc`739309e2 1 1 1 1
0x00007ffc`739309e4 1 1 1 1
0x00007ffc`73930a98 1 1 1 1
0x00007ffc`73930a9f 1 1 1 1
0x00007ffc`73930aa2 1 1 1 1
0x00007ffc`73930aa4 1 1 1 1
Core!BasicGrammar.Program.Main 1 2 2 2
KERNEL32!GetLastErrorStub 6 1 1 1
KERNEL32!SetLastErrorStub 6 1 1 1
KERNEL32!WideCharToMultiByteStub 1 1 1 1
KERNEL32!WriteFile 1 1 1 1
KERNELBASE!GetLastError 6 3 3 3
KERNELBASE!GetMBNoDefault 1 138 138 138
KERNELBASE!WideCharToMultiByte 1 98 98 98
KERNELBASE!WriteFile 1 45 45 45
System_Console 5 4 4 4
System_Console!Interop.Kernel32.WriteFile 1 56 56 56
System_Console!System.Console.WriteLine 1 13 13 13
System_Console!System.Console.get_Out 1 7 7 7
System_Console!System.ConsolePal.WindowsConsole 1 6 6 6
System_Console!System.ConsolePal.WindowsConsole 1 9 9 9
System_Console!System.ConsolePal.WindowsConsole 1 36 36 36
System_Console!System.Text.OSEncoder.GetBytes 1 76 76 76
System_Console!System.Text.OSEncoding.GetMaxByt 1 16 16 16
System_Console!System.Text.OSEncoding.WideCharT 1 48 48 48
System_Private_CoreLib!System.ArgumentNullExcep 2 5 5 5
System_Private_CoreLib!System.ArgumentOutOfRang 3 5 5 5
System_Private_CoreLib!System.Buffer.Memmove 1 24 24 24
System_Private_CoreLib!System.Char.IsHighSurrog 1 6 6 6
System_Private_CoreLib!System.IO.StreamWriter.F 1 99 99 99
System_Private_CoreLib!System.IO.StreamWriter.W 1 120 120 120
System_Private_CoreLib!System.IO.TextWriter.Syn 1 30 30 30
System_Private_CoreLib!System.ReadOnlySpan`1.Ge 1 5 5 5
System_Private_CoreLib!System.Runtime.InteropSe 1 11 11 11
System_Private_CoreLib!System.Runtime.InteropSe 1 10 10 10
System_Private_CoreLib!System.Text.Encoder.GetB 1 33 33 33
System_Private_CoreLib!System.Text.Encoding.get 1 2 2 2
coreclr!Assembly::FindModuleByExportedType 1 51 51 51
coreclr!Assembly::FindModuleByTypeRef 1 107 107 107
coreclr!ClassLoader::GetClassValue 2 58 418 238
coreclr!ClassLoader::LoadTypeDefOrRefThrowing 1 73 73 73
coreclr!ClassLoader::LoadTypeDefThrowing 1 73 73 73
coreclr!ClassLoader::ResolveTokenToTypeDefThrow 2 41 200 120
coreclr!CompareTypeTokens 2 23 167 95
coreclr!ConstructKeyCallbackCompare::UseKeys 1 29 29 29
coreclr!CorSigUncompressBigData 3 17 17 17
coreclr!CorSigUncompressData 6 19 24 20
coreclr!CorSigUncompressToken 3 18 18 18
coreclr!CorSigUncompressToken_EndPtr 2 19 19 19
coreclr!DelayLoad_MethodCall 5 39 39 39
coreclr!DomainAssembly::EnsureLoadLevel 9 13 13 13
coreclr!EEJitManager::JitCodeToMethodInfo 1 17 17 17
coreclr!ExecutionManager::FindCodeRangeWithLock 1 67 67 67
coreclr!ExternalMethodFixupPatchLabel 5 1 1 1
coreclr!ExternalMethodFixupWorker 5 481 559 534
coreclr!Frame::GetReturnAddress 5 11 11 11
coreclr!JIT_MonEnterWorker_Portable 1 34 34 34
coreclr!JIT_MonExitWorker_Portable 1 33 33 33
coreclr!JIT_PInvokeBegin 2 22 22 22
coreclr!JIT_PInvokeEnd 2 12 12 12
coreclr!LookupMap<unsigned __int64>::GetElement 2 18 18 18
coreclr!LookupMapBase::GetElementPtr 2 7 7 7
coreclr!MDInternalRO::GetAssemblyRefProps 1 64 64 64
coreclr!MDInternalRO::GetExportedTypeProps 2 41 41 41
coreclr!MDInternalRO::GetNameAndSigOfMemberRef 1 61 61 61
coreclr!MDInternalRO::GetNameOfMethodDef 10 22 22 22
coreclr!MDInternalRO::GetNameOfTypeDef 2 42 42 42
coreclr!MDInternalRO::GetNameOfTypeRef 4 30 30 30
coreclr!MDInternalRO::GetParentOfMemberRef 1 25 25 25
coreclr!MDInternalRO::GetResolutionScopeOfTypeR 5 23 23 23
coreclr!MDInternalRO::GetSigOfMethodDef 1 40 40 40
coreclr!MDInternalRO::GetTypeSpecFromToken 1 45 45 45
coreclr!MDInternalRO::IsValidToken 6 12 30 24
coreclr!MarshalNative::SetLastPInvokeError 1 7 7 7
coreclr!MemberLoader::FindMethod 1 1106 1106 1106
coreclr!MemberLoader::GetDescFromMemberRef 2 47 156 101
coreclr!MetaSig::CompareElementType 2 127 164 145
coreclr!MetaSig::CompareMethodSigs 1 126 126 126
coreclr!MetaSig::CompareTypeDefOrRefOrSpec 1 39 39 39
coreclr!MethodDesc::CheckRestore 6 13 13 13
coreclr!MethodDesc::EnsureActive 1 45 45 45
coreclr!MethodDesc::FindOrCreateAssociatedMetho 1 183 183 183
coreclr!MethodTable::EnsureInstanceActive 1 29 29 29
coreclr!MethodTable::GetSlotPtrRaw 1 17 17 17
coreclr!MethodTable::MethodDataObject::GetDeclM 10 23 23 23
coreclr!MethodTable::MethodDataObject::GetNumMe 1 18 18 18
coreclr!Module::GetAssemblyIfLoaded 1 70 70 70
coreclr!Module::GetMDImport 9 3 3 3
coreclr!Module::IsFullModule 1 2 2 2
coreclr!Module::LoadAssemblyImpl 1 87 87 87
coreclr!MulticastFrame::GetFunction 5 2 2 2
coreclr!ReadyToRunInfo::TryLookupTypeTokenFromN 1 831 831 831
coreclr!SigParser::SkipExactlyOne 1 29 29 29
coreclr!SigPointer::GetGenericInstType 1 105 105 105
coreclr!SigPointer::GetTypeHandleThrowing 2 75 490 282
coreclr!SimpleRWLock::EnterRead 1 45 45 45
coreclr!StgBlobPoolReadOnly::GetBlob 4 31 31 31
coreclr!TokenPairList::TokenPairList 1 10 10 10
coreclr!TransitionFrame::GetReturnAddressPtr 5 7 7 7
coreclr!TypeHandle::GetLoaderModule 1 7 7 7
coreclr!ZapSig::DecodeMethod 1 143 143 143
coreclr!__chkstk 1 14 14 14
coreclr!__security_check_cookie 6 6 6 6
ntdll!LdrpDispatchUserCallTarget 83 11 11 11
ntdll!NtWriteFile 1 6 6 6
ntdll!RtlSetLastWin32Error 6 17 17 17
ntdll!_security_check_cookie 6 6 6 6
ucrtbase!strcmp 16 9 108 42
1 system call was executed
Calls System Call
1 ntdll!NtWriteFile
Core!BasicGrammar.Program.Main+0x38:
00007ffc`73821968 90 nop
以上为Console.WriteLine(“Hello”)语句成功运行的完整用户态调用列表,虽然早有心理准备,但还是被最终结果惊到了:没料到如此简单的一条语句,实际上仅用户态机器指令数就达到13109条(见下面单行列表),而且整个调用深度竟然达到了19级。另外通过该列表可以发现,在Console.WriteLine已经被JIT以后,执行过程中coreclr的参与依旧十分频繁,有接近70个CoreClr模块内方法参与了执行。
13109 instructions were executed in 13108 events (0 from other threads)
我进行过一次简单测试:调试一个c++程序,main代码运行结束后,进入了ucrtbased!exit方法时我运行了wt命令,结果列表长度高达20878行,简单按一半计算,需要调用1万多个子程序。
这是一段小插曲,现在话题收回来:
为了不因这种崩溃影响文章内容的完整性,我简单修改了一下源程序,注释掉了第10行的显示调用 Console.WriteLine(sum),然后重新开始调试。当然了,重新开始时我也使用了一些其他命令,目的是为了引导大家举一反三。
进入for循环
点restart重新启动调试,然后点击Go,让程序停到Debugger.Break()。
这次我们使用一个新命令:!sos.clrstack,该命令可以得到托管栈回朔,并且可以找到Main的入口点地址,在本例中就是00007ffac6c31958。然后就可以使用!u命令列出Main的汇编列表,再根据汇编列表找到我们希望程序运行到的目标点,比如第8行:
E:\test\a\Core\Program.cs @ 8:
00007ffa`c6c31968 90 nop
然后就可以使用比如
0:000> g 00007ffa`c6c31968
完整记录如下:
0:000> !clrstack
OS Thread Id: 0x5670 (0)
Child SP IP Call Site
00000000001CEB58 00007ffbc8667a72 [HelperMethodFrame: 00000000001ceb58] System.Diagnostics.Debugger.BreakInternal()
00000000001CEC60 00007ffb2044550a System.Diagnostics.Debugger.Break() [/_/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs @ 18]
00000000001CEC90 00007ffac6c31958 BasicGrammar.Program.Main() [E:\test\a\Core\Program.cs @ 5]
0:000> !U /d 00007ffac6c31958
Normal JIT generated code
BasicGrammar.Program.Main()
ilAddr is 00000000024C2050 pImport is 00000000057F7B40
Begin 00007FFAC6C31930, size 64
E:\test\a\Core\Program.cs @ 4:
00007ffa`c6c31930 55 push rbp
00007ffa`c6c31931 4883ec30 sub rsp,30h
00007ffa`c6c31935 488d6c2430 lea rbp,[rsp+30h]
00007ffa`c6c3193a 33c0 xor eax,eax
00007ffa`c6c3193c 488945f4 mov qword ptr [rbp-0Ch],rax
00007ffa`c6c31940 8945fc mov dword ptr [rbp-4],eax
00007ffa`c6c31943 833ddec9080000 cmp dword ptr [00007ffa`c6cbe328],0
00007ffa`c6c3194a 7405 je Core!BasicGrammar.Program.Main+0x21 (00007ffa`c6c31951)
00007ffa`c6c3194c e85facc85f call coreclr!JIT_DbgIsJustMyCode (00007ffb`268bc5b0)
00007ffa`c6c31951 90 nop
E:\test\a\Core\Program.cs @ 5:
00007ffa`c6c31952 ff15d8df0a00 call qword ptr [00007ffa`c6cdf930]
>>> 00007ffa`c6c31958 90 nop
E:\test\a\Core\Program.cs @ 6:
00007ffa`c6c31959 33c0 xor eax,eax
00007ffa`c6c3195b 8945fc mov dword ptr [rbp-4],eax
E:\test\a\Core\Program.cs @ 7:
00007ffa`c6c3195e c745f801000000 mov dword ptr [rbp-8],1
00007ffa`c6c31965 90 nop
00007ffa`c6c31966 eb13 jmp Core!BasicGrammar.Program.Main+0x4b (00007ffa`c6c3197b)
E:\test\a\Core\Program.cs @ 8:
00007ffa`c6c31968 90 nop
E:\test\a\Core\Program.cs @ 9:
00007ffa`c6c31969 8b45fc mov eax,dword ptr [rbp-4]
00007ffa`c6c3196c 0345f8 add eax,dword ptr [rbp-8]
00007ffa`c6c3196f 8945fc mov dword ptr [rbp-4],eax
E:\test\a\Core\Program.cs @ 11:
00007ffa`c6c31972 90 nop
E:\test\a\Core\Program.cs @ 7:
00007ffa`c6c31973 8b45f8 mov eax,dword ptr [rbp-8]
00007ffa`c6c31976 ffc0 inc eax
00007ffa`c6c31978 8945f8 mov dword ptr [rbp-8],eax
00007ffa`c6c3197b 33c0 xor eax,eax
00007ffa`c6c3197d 837df864 cmp dword ptr [rbp-8],64h
00007ffa`c6c31981 0f9ec0 setle al
00007ffa`c6c31984 8945f4 mov dword ptr [rbp-0Ch],eax
00007ffa`c6c31987 837df400 cmp dword ptr [rbp-0Ch],0
00007ffa`c6c3198b 75db jne Core!BasicGrammar.Program.Main+0x38 (00007ffa`c6c31968)
E:\test\a\Core\Program.cs @ 12:
00007ffa`c6c3198d 90 nop
00007ffa`c6c3198e 4883c430 add rsp,30h
00007ffa`c6c31992 5d pop rbp
00007ffa`c6c31993 c3 ret
0:000> g 00007ffa`c6c31968
Core!BasicGrammar.Program.Main+0x38:
00007ffa`c6c31968 90 nop
条件断点
刚进入第8行的时候,sum = 0,i = 1。此时通过多次点击Step over,单步运行几次程序,如图所示,此刻已经 i=6, sum = 5
但是,这样调试循环程序太麻烦了,假设我们希望现在正常执行循环,直到 i = 98的时候再断下,要如何做?这时就可以使用条件断点。
下面命令的含义是:如果dwo(@rbp-8) > 0n97,那么就断到00007ffa`c6c31968位置,否则继续执行(gc)。
下完条件断点以后,输入g命令继续执行,程序完美断到了00007ffac6c31968位置,而且此时查看rbp-8地址的内容(也就是变量 i )是62h,也就是98。
0:000> bp 00007ffa`c6c31968 "j (dwo(@rbp-8) > 0n97) ''; 'gc'"
0:000> g
Core!BasicGrammar.Program.Main+0x38:
00007ffa`c6c31968 90 nop
0:000> ? dwo(@rbp-8)
Evaluate expression: 98 = 00000000`00000062