【问题标题】:Very Basic Compilation Issues - please help!非常基本的编译问题 - 请帮助!
【发布时间】:2011-07-19 12:17:06
【问题描述】:
(1) 归根结底:要使程序在特定操作系统上可执行,必须采取什么措施?机器码,汇编语言?
(2) 它必须是机器可读的才能被某种 CPU 执行吗?
(3) 操作系统在程序执行时扮演什么样的角色?和帮助系统解释程序代码有什么关系吗?
(4) 对于 Windows PC,是否所有程序都必须是 .exe 才能执行?为什么选择 Java 虚拟机?
(5) 反编译器是如何工作的?编译成机器码和汇编语言的程序有什么区别?
非常感谢!!
【问题讨论】:
标签:
compiler-construction
assembly
operating-system
compilation
decompiler
【解决方案1】:
这完全取决于操作系统。从理论上讲,您可以拥有一个即时解释 COBOL 源代码的操作系统。但通常,您需要操作系统可以加载到内存中并运行的特定格式的可执行文件。所以,就是机器码。
同样,这取决于 CPU。绝大多数(我所知道的所有)都会运行他们自己的机器代码。
操作系统提供了一种运行应用程序的方法,并为这些应用程序提供支持服务。
没有。如果您希望它们执行,它们必须具有特定格式,但这并不一定意味着exe 扩展名。而且,虽然您认为您正在运行一个Java 类文件,但实际上您正在运行的是一个可执行文件的JVM。它恰好是在解释类文件(为了简单起见,忽略 JIT 的东西,这会将 Java 字节码转换为原始机器代码以提高效率。您可以“执行”Java 类文件、Powershell 脚本、cmd 脚本等。
反编译器会尝试将已编译的文件(EXE、类文件、Python 字节码等)转换回其原始形式,或至少接近原始形式。