【问题标题】:What is "absolute machine code" in .net framework?.net 框架中的“绝对机器码”是什么?
【发布时间】:2017-10-25 20:59:17
【问题描述】:

我试图了解 .net 框架架构,但遇到了“可重新定位的机器代码”和“绝对机器代码”这两个术语。据说源代码在编译时被转换为可重定位机器码,而这种可重定位机器码在加载时被转换为绝对机器码。 这是否意味着可重新定位的机器代码只不过是一个程序集?那么什么是绝对机器码呢?什么是加载时间? .net 框架架构中的编译时、加载时和运行时/执行时到底发生了什么?我找不到这些术语的明确区别。

【问题讨论】:

  • 它在 .NET 中(几乎)没有任何作用。机器代码是即时生成的,之后永远不会移动。一个相当重要的特性是,抖动和 CLR 可以通过硬编码地址使代码非常高效,而不必担心它们必须进行调整。它对非托管代码很重要,即在一台机器上编译并在另一台机器上执行的那种。此类代码使用必须猜测 DLL 的首选加载地址的链接器。如果该地址空间被占用,那么它必须将代码移动到其他地方,这可能需要修补地址。

标签: .net assembly compilation


【解决方案1】:

我对 .net 不太熟悉,但我想我可以给你一个高层次的解释:

  • “可重新定位的机器代码”是指它获取您的代码并将其编译为非体系结构特定的版本。如果您不知道,运行程序所需的汇编代码可能因系统而异。我不确定这个机器代码到底是什么样子,但我认为他们正在尽可能多地编译你的代码。
  • “绝对机器码”是将在系统上运行的实际代码。当程序加载时(当您运行它时),它必须采用与系统无关的可重定位机器代码,并执行最后几个步骤,使其专门在该系统上运行。
  • “加载时间”是,我假设,当你运行程序时

因此,当您编译程序时,它会将其转换为某种形式的字节码,而这种字节码实际上无法自行运行。然后当你运行程序时,那个字节码会被转换成可以运行的实际汇编代码。

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 2012-12-19
    • 2015-03-22
    • 1970-01-01
    • 2012-02-01
    • 2010-10-30
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多