• .Net 7里的函数.Ctor和.CCtor是干啥用的呢?你知道吗


    楔子

    有小伙伴被面试官问到这个问题,本篇彻底解析下这个问题。

    为了彻底点,注意本篇是最底层的.Net 7 RC CLR运行模型(汇编)为基础进行全局剖析,局部业务分析。

    如有疏漏,请斧正。QQ:676817308.公众号:江湖评谈

    目的非手段

    这两个函数比较特殊的存在,.Ctor是非静态默认实例化。.CCtor是静态默认实例化。这两个函数伴随着.Net 任何对象的实例化都自动存在于这个对象当中。

    跟踪.CCtor可以在全局静态对象下断点,观察它的里面运行。
    跟踪.Ctor可以通过!name2ee 模块 模块.类名..Ctor找到JITTED Code Address,观察它的运行。正如本段题所说,这只是手段,不是目的。所以下面看目的。

    .Ctor目的

    先来看下非静态默认构造函数.Ctor。上一段代码:

    1. internal class Program
    2. {
    3. public class ABC
    4. {
    5. }
    6. static void Main(string[] args)
    7. {
    8. ABC abc = new ABC();
    9. Console.ReadLine();
    10. }
    11. }

    直接给它反编译:

    1. 00007FFDF2FA03B0 55 push rbp
    2. 00007FFDF2FA03B1 48 83 EC 40 sub rsp,40h
    3. 00007FFDF2FA03B5 48 8D 6C 24 40 lea rbp,[rsp+40h]
    4. 00007FFDF2FA03BA C5 D8 57 E4 vxorps xmm4,xmm4,xmm4
    5. 00007FFDF2FA03BE C5 FA 7F 65 E8 vmovdqu xmmword ptr [rbp-18h],xmm4
    6. 00007FFDF2FA03C3 33 C0 xor eax,eax
    7. 00007FFDF2FA03C5 48 89 45 F8 mov qword ptr [rbp-8],rax
    8. 00007FFDF2FA03C9 48 89 4D 10 mov qword ptr [rbp+10h],rcx
    9. 00007FFDF2FA03CD 83 3D BC E9 19 00 00 cmp dword ptr [7FFDF313ED90h],0
    10. 00007FFDF2FA03D4 74 05 je 00007FFDF2FA03DB
    11. 00007FFDF2FA03D6 E8 B5 BF 79 5E call JIT_DbgIsJustMyCode (07FFE5173C390h)
    12. 00007FFDF2FA03DB 90 nop
    13. 00007FFDF2FA03DC 48 B9 30 F6 5B F3 FD 7F 00 00 mov rcx,7FFDF35BF630h
    14. 00007FFDF2FA03E6 E8 75 7C C1 5E call JIT_TrialAllocSFastMP_InlineGetThread (07FFE51BB8060h)
    15. 00007FFDF2FA03EB 48 89 45 F0 mov qword ptr [rbp-10h],rax
    16. 00007FFDF2FA03EF 48 8B 4D F0 mov rcx,qword ptr [rbp-10h]
    17. // 这个地方是调用了.Ctor
    18. 00007FFDF2FA03F3 FF 15 0F 8D 60 00 call qword ptr [7FFDF35A9108h]
    19. 00007FFDF2FA03F9 48 8B 45 F0 mov rax,qword ptr [rbp-10h]
    20. 00007FFDF2FA03FD 48 89 45 F8 mov qword ptr [rbp-8],rax
    21. 00007FFDF2FA0401 FF 15 A9 93 60 00 call qword ptr [7FFDF35A97B0h]
    22. 00007FFDF2FA0407 48 89 45 E8 mov qword ptr [rbp-18h],rax
  • 相关阅读:
    ElasticSearch聚合查询
    一些程序上概念的微思考
    css 自定义虚线
    无参函数声明 函数的使用范围
    APT样本分析 -plugx家族RAT⽊⻢
    汇编攻城记-算术运算ADD/SUB/RSB/ADC/SBC/RSC
    根据以下电路图,补全STM32F103RCT6的IO口初始化程序
    微软发布2023年10月补丁,修复了103个缺陷,包括2个活跃的漏洞利用
    Ajax 之XMLHttpRequest讲解
    App 软件开发《判断5》试卷及答案
  • 原文地址:https://blog.csdn.net/tangyanzhi1111/article/details/127746597