2013-04-23 99 views
-1

我想知道是否有一种方法可以设置编译器将我的代码编译为只包含1和0的.bin文件,不需要十六进制代码一个.exe文件。我想让代码在处理器上运行,而不是操作系统。是否有任何设置将其设置为Express版本中的设置?提前致谢。在Visual Studio 2012 Express中将C代码编译到.bin文件中

+5

你听起来很迷茫;十六进制只是二进制的另一种表示。 .exe是一个包含运行它所需的所有二进制文件的文件。你对这个问题的意图是什么? – user1167662 2013-04-23 02:28:54

+0

构建操作系统。为了达到最佳性能,我希望它尽可能低。 – 2013-04-23 02:36:59

+2

你想让这个平台运行在什么平台上?构建一个操作系统并不是一件简单的事情,我也不会试着从一个典型的PC开始,像你可能想到的那样。从与你处于同一位置的人处获得此信息,不知道如何制作简单的操作系统。我通过尝试使用树莓派作为平台执行相同的任务并学习了很多,本教程:http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/。 – user1167662 2013-04-23 02:41:57

回答

0

“.bin”文件没有什么魔力。扩展名一般只是表示一个二进制文件,但所有文件都是二进制文件。因此,您可以通过将链接器生成的“.exe”文件重命名为“.bin”来创建“.bin”文件。

我认为你不会对此感到满意,所以我会详细说明一下。 “.exe”文件扩展名(至少在Windows上,我假设你已经添加了一个与Visual Studio相关的标记),这意味着一个带有特殊格式的二进制文件,简称为Portable Executable。这是Windows操作系统上使用的二进制文件的标准格式,包括可执行文件和DLL。

所以一个PE文件是一个二进制(“.bin”)文件,但是一个带有“.bin”扩展名的未知二进制文件并不是必然一个PE文件。你可以采取一些其他的二进制文件(如图像),并将其重命名为“.bin”扩展名。它只是包含一个没有特定格式的二进制位序列。您将无法执行该文件,因为它的格式不正确。它缺乏使其可执行的神奇PE头。 C编译系统默认输出PE文件是有原因的:这是唯一对您有用的文件类型。

而像user1167662在他的comment中所说的,关于十六进制代码没有什么不可思议的。二进制文件中的代码可以用十六进制或二进制格式表示。无论哪种方式,都是完全一样的信息。任何好的文本编辑器(至少为程序员设计的)都可以使用表示(或ASCII或十进制)打开和显示文件的内容。

我希望它尽可能低,以获得最佳性能。

它没有什么“更低的水平”,你当然不会得到任何优化的性能。 PE文件已经包含直接在微处理器上运行的本机机器码。它不像托管代码那样被解释。它包含处理器机器语言中的一系列指令。 PE文件只包含一个额外的头文件,允许它们被操作系统识别和执行。这对性能没有影响。

构建操作系统。

现在,这有点不同了…特别是,这比编写常规的Windows应用程序要困难得多。你有一个很多工作在你面前,因为你不能依靠操作系统来做任何事情来帮助你。您需要了解您所针对的底层硬件 - 开发人员的指南/手册对您的CPU非常有用。

而且你必须得到一个不同的构建环境。如果您没有使用识别的格式创建PE文件,Visual Studio不会对您有所帮助。微软的C++链接程序也不包含在内,link.exe。链接器不支持输出“扁平”二进制文件(即剥去PE标头的文件)。你将需要一个不同的链接器。 The GCC toolset can do this。有一个Windows端口;它被称为MinGW

我也推荐一本关于操作系统开发的书。在堆栈溢出问题的答案中覆盖太多了。而对于学习目的,我强烈建议使用Intel以外的架构。

相关问题