打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
.NET工作机制
 
  
  
  #String类型:
      例如:我们定义了一个Myclass函数名,这个函数名就是保存在String类型里面的

#Guid堆
      保存一系列数据,最典型的一个实例是:一个函数的参数,这个东西我们把它叫做一个参数集

#Blob
保存任意大小的数据

Matedata:用来描述数据的数据
怎么来理解呢?
因为程序代码是一个数据,那么描述这个程序代码的类型定义,这就是MetaData。

描述了程序中的哪些类型
它用两种形式保存,一种是表格(table),一种是堆,那么不管是堆也好,还是表格也好,都保存在Stream里面。
这个表总是压缩和未压缩的表示为一个横杠(—)和#号。

表的作用:有类型的定义,有类型的引用,对程序集的引用等这样的一个信息,或者对参数的引用,对方法的引用,对方法的定义,那这样一个信息都是以一个表的形式来保存的,表自然是有行也有列,那么行就是一个一个的数据  例如:一个定义(Class)占一行
那么列呢?
就是Class的信息,一列一列的来,这就是表的格式

堆:里面是一些松散的信息数据比如说:字符串


托管指针实际上是一个引用
比如:C#中的out、ref这就是引用。
例如:你想传一个int值,如果你想把这个int值传过去在传回来就用 ref

注意:传的指针是非null,指针内容为null.....

公共语言运行库
Invoke:托管代码和非托管代码之间的互操作性
问题:

(1)、如何使用P/Invoke以及Pinvoke如何调用Windows API或者任意非托管代码?

(2)、什么是平台(Platform)相关的非托管代码?

(3)、什么是P/Lnvoke?及用途....
【1】P/Lnvoke=Platform Lnvoke
【2】允许托管代码调用平台(Platform)先关的非托管代码   例如:C++、VB(这里指VB1、2 不是VB.NET)、Delphi等等非托管语言可以写出一个dll通过P/Lnvoke也可以去调用这些dll中所暴漏的一些函数,同时呢也可以去调用windows系统中dll所暴漏的一些API

(4)、为什么要使用P/Lnvoke
【1】数组(.NET平台下,我们所写的C#程序,他编译出来的总是平台无关的中间代码,也就是微软的中语言,而这样的代码是通过JIT,也就是说"即时编译"在你运行的时候才编译出来的。同时你也不需要对内存进行管理,因为专门有GC(垃圾回收器)来负责清理内存)JIT和GC的性能十分优秀

(5)IL是谁来解析呢?
(5)、.NET是什么?
.NET是虚拟机、.NET是一个平台 
.NET只懂IL(中间语言)而这种中间语言是靠.NET中的一种支架来解析。支架(一种动态编译支架)把IL编译成代码,然后再.NET中进行执行,所以说这是一种托管环境

IL代码的特点:
【1】与平台无关,也就是不绑定在任何平台上
【2】IL所有的数据都是是放在堆栈里

开发工具:
【1】ILASM:把IL编译成对应的PE文件,当然它里面装的还是IL和matadat文件,只不过它把它打包成了.NET,PE所认识的格式。那么IL的文本格式PE是不认识的所以需要编译器
【2】ILDASM:是反编译的,因为IL是固定的,所以对于ILDASM来说反编译还是比较容易

运行库:BCL
.NET除了虚拟机之外,其实IL是做不了什么事情的
那么.NET就需要一个库 例如:最简单的输入/输出、文件操作、目录操作、网络操作等等这些东西都是用一套库来执行的
 
.NET只支持IL和MetaData那么如果你。如果你看到C#代码就能把C#代码翻译成IL,知道IL在.NET里面怎样运行,那么自然是水到渠成.....
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何利用ILSPY反编译工具重建C#.NETWeb源码解决方案
【Perfecssional C# 2008】PartI - Chapter 1 - .N...
[C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)
从高级源码到机器码的过程,反射DLL加载卸载
.Net程序的设计编译(design-time or run-time)和运行原理 (CPU-specific binary or pseudo-code)
调用 DLL 函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服