【问题标题】:what language is dotnet executable written in?dotnet 可执行文件是用什么语言编写的?
【发布时间】:2011-04-07 19:55:11
【问题描述】:

我以为它会是通用中间语言,但在记事本中它看起来根本不像那样。它在现实中看起来比在教程中更丑吗?还是从 CIL 进一步编译的某种字节码形式?

【问题讨论】:

  • 是的,我认为这将是一个二进制表示!
  • 这可能是一个不寻常的问题,但对于刚刚学习 .NET 的人来说,它的基础并不遥远。我认为它不值得投反对票。来自我的 +1。

标签: executable cil .net


【解决方案1】:

CIL 是二进制格式的名称,而不是您想的“汇编程序”的名称。

您能想象 .NET 程序集是文本文件吗?

【讨论】:

  • 我可以想象。我可以想象很多事情!但是很可惜,我不会飞。
【解决方案2】:

.NET 可执行文件是具有 PE​​ 标头的二进制文件(与本机可执行文件相同,但值略有不同)。 PE 头告诉操作系统加载 CLR,然后加载程序集。

标头之外的内容是 CIL 代码的二进制表示,以及一些元数据和其他内容。您在教程中看到的文本是 CIL 的文本表示,就像您在有关汇编语言编程的教程中看到的汇编语言代码只是二进制机器代码的文本表示一样。

有关详细信息,请参阅http://www.yetanotherchris.me/home/2010/7/12/inside-net-assemblies-part-1.html(以及许多其他人)。

【讨论】:

  • .Net 可执行文件与本机可执行文件的格式不同。
【解决方案3】:

.Net 可执行文件通常不是编写的,它是从 C#、F# 或 VB.Net 等其他语言编译而来的。

可以使用 ILDASM 工具查看 .Net 可执行文件的内容。

内容首先是用于反射、签名或其他元代码目的的清单。

其次是 MSIL 指令本身。这些是一种字节码格式,但 ILDASM 会告诉你指令是什么。

有时,可执行文件中会包含图像、声音或其他内容等资源。

可执行文件在安装期间(我认为这并不常见)或作为执行的前兆被即时编译为本机代码。可以存储生成的本机代码以供重用。 (这是我在 PDC 2001 期间被告知的内容,可能“已过时”。)

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 2013-09-06
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多