-2

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

4

1 回答 1

0

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

我想你不会对此感到满意,所以我会进一步详细说明。“.exe”文件扩展名(至少在 Windows 上是这样,因为您已经添加了与 Visual Studio 相关的标签,所以我假设它)意味着具有特殊格式的二进制文件 — Portable Executable或简称 PE。这是 Windows 操作系统上使用的二进制文件的标准形式,适用于可执行文件和 DLL。

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

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

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

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

构建操作系统。

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

而且您必须获得不同的构建环境。如果您不以可识别的格式创建 PE 文件,Visual Studio 不会对您有任何帮助。微软的 C++ 链接器也不包含在其中,link.exe. 链接器不支持输出“平面”二进制文件(即剥离了 PE 标头的文件)。您将需要一个不同的链接器。GCC 工具集可以做到这一点。有一个Windows端口;它被称为MinGW

我还推荐一本关于操作系统开发的书。回答 Stack Overflow 问题的内容太多了。出于学习目的,我强烈建议使用英特尔 x86 以外的架构。

于 2013-04-23T03:06:28.523 回答