当前位置: 首页 > article >正文

Mono里运行C#脚本35—加载C#语言基类的过程

前面大体地分析了整个Mono运行过程,主要从文件的加载,再到EXE文件的入口点,
然后到方法的编译,机器代码的生成,再到函数调用的跳板转换,进而解析递归地实现JIT。

但是还有很多功能没有解析的,就是C#语言相关最多的,就是类的加载,以及类语言设计的实现属性,
比如类的继承,类的方法的多态,类的虚拟方法,还有类的成员变量等等。

接着下来,将要一点一点地探索Mono怎么样实现相关的语言属性。

在前面的例子反汇编里,有下面两行语句:
  .class private auto ansi beforefieldinit MonoEmbed
        extends [mscorlib]System.Object

当Mono解析IL代码到这两行时,是怎么样处理的呢?
先拿到一堆属性,并且是一个类型定义,它的名称是MonoEmbed,并且获取扩展的属性,以及继承的基类名称。

由于MonoEmbed类是一个定义程序入口点的类,并没有生成对象的过程,
所以它不会生成对象的过程。
因此这个类会有特殊的处理,这个类的定义是由入口点函数来带动类定义的过程的。
所以这个类的处理过程是先从入口点出发。
mono_jit_exec


http://www.kler.cn/a/518933.html

相关文章:

  • 求阶乘(信息学奥赛一本通-2019)
  • js/ts数值计算精度丢失问题及解决方案
  • debian12.9编译freeswitch1.10.12【默认安装】
  • 导出地图为图像文件
  • RabbitMQ 死信队列
  • Vivado生成X1或X4位宽mcs文件并固化到flash
  • 高阶C语言|数组名的深度解析(数组名结合sizeof与strlen的详解)
  • impact 影响分析学习笔记(一)
  • 【后端面试总结】mysql的join,left join,right join,full join分别是什么意思
  • maven 全局配置
  • 【Python使用】嘿马python高级进阶全体系教程第11篇:静态Web服务器-面向对象开发,1. 以面向对象的方式开发静态W
  • 79,【3】BUUCTF WEB [GXYCTF2019]BabysqliV3.0
  • mongoDB常见指令
  • Go中new和make的区别对比
  • 机器学习的通俗解释
  • Node.js下载安装及环境配置教程 (详细版)
  • 服务器中的流量主要是指什么?
  • RPC是什么?和HTTP区别?
  • Python 对列表进行排序的 5 种方法
  • C++17 新增属性详解
  • Unity在WebGL中拍照和录视频
  • 通过Python编程语言实现“机器学习”小项目教程案例
  • 【Rust自学】15.2. Deref trait Pt.1:什么是Deref、解引用运算符*与实现Deref trait
  • Mongodb副本集群为什么选择3个节点不选择4个节点
  • 【Matlab高端绘图SCI绘图模板】第002期 绘制面积图
  • Spring中的事务管理器TransactionManager