字节码二进制可执行文件(如Java类文件、鹦鹉字节码文件或CLR文件)与机器代码可执行文件(如ELF、Mach-O和PE )之间有什么区别。
两者有什么不同之处?
例如,ELF结构中的.text区域等于类文件的哪一部分?
或者它们都有头,但是ELF和PE头包含体系结构,但是类文件不包含
Java类文件

精灵文件

PE文件

发布于 2012-08-30 22:45:10
正如imulsion所指出的,字节码是编译成机器代码之前的中间步骤。因为最后一步是加载时间(通常是运行时,就像JIT编译那样),所以字节代码是独立于体系结构的:运行时(CLR for .net或JVM for Java)负责将字节代码操作码映射到它们的底层机器代码表示形式。
相比之下,本机代码(Windows: PE、PE32+、OS /iOS: Mach-O、Linux/Android/etc: ELF)是编译后的代码,适用于特定的体系结构(Android/iOS: ARM,其他大多数是Intel 32位(i386)或64位)。这些都是非常相似的,但仍然需要部分(或者,在Mach-O术语中是“加载命令”)来设置可执行文件的内存结构,因为它是一个进程(旧的DOS支持".com“格式,这是一个原始的内存映像)。在以上所有内容中,您大致可以这样说:
希望这能有所帮助。真的,你的问题含糊不清。
热重
发布于 2012-08-30 07:01:44
字节码是一个“中途”步骤。因此,Java编译器(javac)将把源代码转换为字节代码。机器代码是下一步,计算机获取字节码,将其转换为机器代码(计算机可以读取这些代码),然后通过读取机器代码执行程序。计算机不能直接读取源代码,同样编译器也不能立即转换为机器代码。你需要一个半途而废的步骤来使程序工作。
https://stackoverflow.com/questions/12191462
复制相似问题