【问题标题】:How does C# code gets compiled? [closed]C# 代码是如何编译的? [关闭]
【发布时间】:2018-01-25 13:22:35
【问题描述】:

将C#编译成PE(.exe文件)的过程是怎样的?
如果我错了,请纠正我:

  1. C# 被编译成 MSIL
  2. MSIL 被翻译成字节码
  3. 当我们启动 PE 文件时,.net 虚拟机将其转换回 MSIL 代码并执行它

如果这是正确的,那么这是否意味着当我在文本编辑器中打开 PE 文件时是那个字节码,还是我缺少任何其他步骤,比如加密字节码?

【问题讨论】:

  • 这确实是一个你真的应该花一点时间在网上搜索的话题。记录得很好
  • 看看sharplab.io,您实际上可以看到不同的步骤是什么样的
  • 不,MSIL 已经是“字节码”。 EXE 或 DLL 文件的格式非常灵活,可以存储任意数据。就像 MSIL 和 .NET 程序集所需的元数据一样。在运行时,MSIL 被翻译成机器代码,由即时编译器完成。
  • 所以exe文件只是字节码?

标签: c# compilation command-line-interface cil


【解决方案1】:

C#编译器->exe(PE文件)->机器码

这个PE文件是Pe头、MSIL指令和元数据。

当编译器生成 (MSIL) 时,它也会生成元数据。 MSIL 和元数据包含在可传输的 PE 文件中。此 PE 文件托管是 .NET Framework 而不是 OS。当你运行 PE 文件时,它在 .NET Framework 上运行。

运行.Net PE文件->mscorlib.dll->CLR->JIT->机器码

【讨论】:

  • 所以PE头是纯MSIL字节码?
  • 没有。 .NET 或其他程序集中的 pe 标头相同。
猜你喜欢
  • 2023-03-26
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
相关资源
最近更新 更多