基本编译问题-请帮忙!

最后发布: 2011-03-21 08:10:32


问题

(1)最重要的是:为了使程序在特定操作系统上可执行,所有这些都需要做些什么? 机器代码,汇编语言?

(2)它必须是机器可读的才能被某种类型的CPU执行吗?

(3)在执行程序时,操作系统扮演什么样的角色? 它与帮助系统解释程序代码有关系吗?

(4)鉴于Windows PC,是否必须使所有程序都为.exe才能执行? 为什么选择Java虚拟机?

(5)反编译器如何工作? 编译成机器代码和汇编语言的程序有什么区别?

非常感谢!!

compiler-construction assembly operating-system compilation decompiler
回答

  1. 那完全取决于操作系统。 从理论上讲,您可以拥有一个可以即时解释COBOL源代码的OS。 但是通常,您将需要操作系统可以加载到内存并运行的特定格式的可执行文件。 因此,它是机器代码。

  2. 同样,这取决于CPU。 绝大多数(我所知道的人)都将运行自己的机器代码。

  3. 操作系统提供了一种运行应用程序的方法,并为这些应用程序提供了支持服务。

  4. 否。如果您要执行它们,则它们必须具有特定的格式,但这并不一定意味着exe扩展名。 而且,尽管您认为自己正在运行Java类文件,但实际上,您正在运行的是JVM可执行文件。 碰巧只是在解释类文件(为简单起见忽略了JIT东西,为了提高效率将Java字节码转换为原始机器代码。您可以“执行” Java类文件,Powershell脚本, cmd脚本等)。

  5. 反编译器尝试将已编译的文件(EXE,类文件,Python字节码等)恢复为原始格式,或者至少恢复原始格式。