可执行文件中包含的所有指令类型是什么?

时间:2014-05-08 06:21:08

标签: linux windows operating-system

我知道exe文件包含纯CPU指令和额外的数据。因此,如果我开始运行一个简单的hello world控制台应用程序或32位GUI应用程序(exe文件),那么操作系统会将exe文件中给出的指令加载到内存中以供CPU处理。因此,如果我运行该应用程序,它应该只遵循指令,即仅显示hello world(在一个完整的空白屏幕中只显示' hello world')。但事实并非如此。操作系统稍微控制它在命令提示符的窗口环境中显示。那么实际发生了什么。

编辑:确切地说,我的问题是我想知道exe(Windows OS中的一个简单的16位dos应用程序)文件包含的所有指令(考虑到我上面的混淆)?

3 个答案:

答案 0 :(得分:0)

如果您在特定操作系统上编译程序,则应该运行该操作系统。例如,如果您为Windows编译命令行程序,它将在Windows上运行,但它不适用于Ubuntu。您自己说过,可执行文件的内容因操作系统而异。

您可以做的是在另一个系统上为特定系统使用模拟器。例如,如果您使用的是Linux,则可以使用Wine来运行Windows程序。通过这种方式,您可以为您的程序模拟Windows环境,即使它位于Linux上。

当然,CPU应该按原样遵循说明。例如,如果您想打印一个hello world行,那么您的程序包含的代码就是这样。 但不仅仅是为了那个。它包含了依赖于操作系统的其他东西的代码,这就是问题所在。例如,您的Windows编译程序可能使用某些Windows API来执行打印,并且在Linux上找不到此API。它不是被调用的API,而是直接执行输出的程序

正如Jongware在下面的评论中提到的那样,你可以做的是cross-compile你的代码。在这种情况下,您可以在Windows上编译代码,以便它可以在Linux上运行,但前提是您使用特定Linux所需的库进行编译。但是,在这种情况下,您将无法在Windows上运行代码。

答案 1 :(得分:0)

默认情况下,软件是针对您使用的相同类型的计算机编译的。但是,您也可以安装交叉编译器,以编译其他类型的机器。

开发桌面或服务器应用程序时,几乎总是开发平台(运行编译器的机器)和目标平台(运行应用程序的机器)都是相同的。 “平台”是指CPU架构和操作系统的结合。在CPU架构或操作系统不同的情况下,在一台机器上构建可执行二进制文件并在另一台机器上运行它们的过程称为“交叉编译”。进行交叉编译时需要一个特殊的编译器,称为“交叉编译器”,有时只需要“工具链”。

看看herehere

答案 2 :(得分:0)

  

因此,如果我运行该应用程序,它应该只遵循指令,即仅显示hello world(在一个完整的空白屏幕中只显示' hello world')。

为什么"完成空白屏幕"?这完全取决于您的应用程序的设计方式:

  • 在控制台应用程序中,它会将字符串输出到stdout,然后在您启动程序的控制台内显示该字符串。如果您通过快捷方式直接启动它或双击.exe文件,它将打开一个新的控制台窗口。
  • 在窗口化的应用程序中,它将输出字符串,无论您将其定义为要输出的位置。

唉,你的问题到目前为止太模糊了,不能在这里变得更具体。

  

但事实并非如此。它在某种程度上受操作系统控制,可以在命令提示符的窗口环境中显示。

这是什么意思?

如果这意味着我的想法,我。即你确实得到一个带有字符串输出的黑色窗口,好吧,如果它是一个控制台应用程序,它正是它应该如何工作。