字节码二进制可执行文件(如 Java 类文件、Parrot 字节码文件或 CLR 文件)与机器码可执行文件(如 ELF、Mach-O 和 PE)之间有什么区别。
两者之间的显着区别是什么?
比如ELF结构中的.text区域等于class文件的哪一部分?
或者它们都有标头,但 ELF 和 PE 标头包含体系结构,但类文件没有
Java 类文件
精灵文件
体育档案
字节码二进制可执行文件(如 Java 类文件、Parrot 字节码文件或 CLR 文件)与机器码可执行文件(如 ELF、Mach-O 和 PE)之间有什么区别。
两者之间的显着区别是什么?
比如ELF结构中的.text区域等于class文件的哪一部分?
或者它们都有标头,但 ELF 和 PE 标头包含体系结构,但类文件没有
Java 类文件
精灵文件
体育档案
正如 imulsion 所指出的,字节码是一个中间步骤,就在编译成机器码之前。因为最后一步是加载时间(通常是运行时,就像即时(JIT)编译一样,字节码是独立于架构的:运行时(.net 的 CLR 或 Java 的 JVM)负责将字节码操作码映射到它们的底层机器码表示。
相比之下,本机代码(Windows:PE、PE32+、OS X/iOS:Mach-O、Linux/Android/etc:ELF)是编译后的代码,适用于特定架构(Android/iOS:ARM,其他大多数:Intel 32位(i386)或 64 位)。这些都非常相似,但仍然需要部分(或者,用 Mach-O 的说法“加载命令”)来设置可执行文件的内存结构,因为它成为一个进程(旧 DOS 支持“.com”格式,这是一个原始内存映像)。在以上所有内容中,您可以粗略地说以下内容:
希望这可以帮助。真的,你的问题很模糊..
TG
字节码是一个“中途”步骤。所以Java编译器(javac)会把源代码转成字节码。机器代码是下一步,计算机获取字节代码,将其转换为机器代码(计算机可以读取),然后通过读取机器代码来执行您的程序。计算机不能直接读取源代码,同样编译器也不能立即翻译成机器代码。您需要一个中途步骤才能使程序正常工作。