jmprax
跳转到了如下:00007FFE2CFE8888 FF 25 FA 0F 00 00jmpqword ptr [7FFE2CFE9888h]
7FFE2CFE9888h
地址的值是00007FFE8A50C7A0
注意这句代码
static string a ="abcd";
它实际上被编译成了一个函数 , 当运行到.CCtor
的时候 , 会调用它 , 然后对它进行赋值 abcd
>>> 00007ffe`06ac29e0 55pushrbp00007ffe`06ac29e1 4883ec20subrsp,20h00007ffe`06ac29e5 488d6c2420learbp,[rsp+20h]00007ffe`06ac29ea 833d9f410c0000cmpdword ptr [00007ffe`06b86b90],000007ffe`06ac29f1 7405jeConsoleApp3!ConsoleApp3.Program..cctor+0x18 (00007ffe`06ac29f8)00007ffe`06ac29f3 e8e8a4cd5fcallcoreclr!JIT_DbgIsJustMyCode (00007ffe`6679cee0)00007ffe`06ac29f8 48bad83000186c020000 mov rdx,26C180030D8h00007ffe`06ac2a02 488b12movrdx,qword ptr [rdx]00007ffe`06ac2a05 48b9902e00186c020000 mov rcx,26C18002E90h00007ffe`06ac2a0f e8fc85bb5fcallcoreclr!JIT_CheckedWriteBarrier (00007ffe`6667b010)00007ffe`06ac2a14 90nop00007ffe`06ac2a15 4883c420addrsp,20h00007ffe`06ac2a19 5dpoprbp00007ffe`06ac2a1a c3ret
JIT_CheckedWriteBarrier
的原型如下:
extern "C" HCIMPL2_RAW(VOID, JIT_CheckedWriteBarrier, Object **dst, Object *ref)
很明显 , 他这就是把ref
指向的object
完整的传递给dst
。也就是赋值给静态字符串a
。寄存器rcx
表示dst
, rdx
表示ref
。此处可以通过 !dumpobj rdx
来查被看对象 。
那么总结下 , .CCtor
的作用就是把静态的全局变量对象进行一个初始化 , 这个结果也说明 , 静态全局变量不是在CLR
初始化的时候初始化 , 而是在当前类的.CCtor
里面初始化的 。
作者:江湖评谈原文:https://www.cnblogs.com/tangyanzhi1111/p/16868020.html版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可 。
文章插图
经验总结扩展阅读
- 甲木的正缘是己土 理念一致夫妻和睦
- 怀念儿时味道的文案 80后农村童年怀旧说说
- 液晶电视什么牌子的质量好 液晶电视排名前十名品牌
- 心遇app女人是免费的吗
- yoyoyoyoyo是什么意思
- 矮的拼音怎么写 矮的解释是什么
- 什么牌子的床性价比高一些 买床哪种材质好又耐用
- 海信稳坐电视销量 其中的秘密有哪些
- 毒五月的九毒日是哪几天
- 杰瑞左右选择是什么梗