在Visual Studio 2012 Express中将C代码编译到.bin文件中
我想知道是否有一种方法可以设置编译器将我的代码编译为只包含1和0的.bin文件,不需要十六进制代码一个.exe文件。我想让代码在处理器上运行,而不是操作系统。是否有任何设置将其设置为Express版本中的设置?提前致谢。在Visual Studio 2012 Express中将C代码编译到.bin文件中
回答:
“.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以外的架构。
以上是 在Visual Studio 2012 Express中将C代码编译到.bin文件中 的全部内容, 来源链接: utcz.com/qa/258670.html