非常基本的编译问题 - 请帮忙!

时间:2011-03-21 08:10:32

标签: compiler-construction assembly operating-system compilation decompiler

(1)在底线:为了使程序在特定操作系统上可执行,它需要采取什么措施?机器码,汇编语言?

(2)是否必须是机器可读的才能由某种CPU执行?

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

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

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

非常感谢!!

1 个答案:

答案 0 :(得分:1)

  1. 这完全取决于操作系统。从理论上讲,您可以拥有一个可以动态解释COBOL源代码的操作系统。但通常,您需要具有特定格式的可执行文件,操作系统可以将其加载到内存中并运行。所以,机器代码就是。

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

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

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

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