【问题标题】:Writing C/C++ Compiler to the MBR to execute source code before Booting up the OS [closed]在启动操作系统之前将 C/C++ 编译器写入 MBR 以执行源代码 [关闭]
【发布时间】:2011-08-28 23:26:48
【问题描述】:

我正在尝试在 C++ 上编写完整的独立于操作系统的程序。我想在启动操作系统(即 Windows)之前加载程序。我试图用我的简单“Hello World”程序替换 MBR,但没有任何反应,我丢失了虚拟硬盘的分区表。 我觉得应该把C++编译器写到MBR直接执行程序或者源代码。

问。编译器为 EXE 格式,因此需要 Windows 或 DOS。可以写在MBR上吗?

问。 C++ 程序需要 DOS 平台。是否可以在没有任何操作系统的情况下运行?

我正在尝试编写一个引导加载程序和一些相同类型的程序。

【问题讨论】:

  • MBR 只有 512 字节。你将如何为它编写编译器?此外,编译器需要操作系统设施,以便它可以读取和写入文件。实际上,您需要操作系统来编写“Hello World”。你的想法是行不通的。
  • 你太离谱了...如果你不能将“hello world”程序放入 MBR,你将如何安装解释器?
  • 我建议您查看一些现有的引导加载程序,例如GRUB:gnu.org/software/grub - 它部分是用 C 语言编写的。
  • 我猜standard reference 不会受伤...
  • 您不能使用 c/c++,因为它们需要操作系统的内存管理。寻找assembler86.de(警告:需要oldscool x86,不支持64-cpu),您可以轻松地将“hello world”编写为MBR(需要5行代码)。 Hexworkshop 让您可以打开一个驱动器,将 MBR 放置到 USB 棒或“软盘”上。

标签: c++ operating-system mbr


【解决方案1】:

用普通的 C/C++ 编写这样的程序是不可能的。没有操作系统,编译器应该在“独立”模式下工作。在这种模式下,没有“stdin.h”标头,没有文件,没有文件访问权限,也没有 printf 可用。

因此,您的程序应该直接调用 BIOS 函数,例如使用asm 关键字。

MBR 二进制的格式非常接近于 DOS 的COM 文件格式。可以将短COM程序转换成MBR启动代码(通过一些编译参数的操作)。

另外,您应该知道 MBR 是一个扇区长,它包含一个分区表。因此,您只有大约 450 个字节来存储二进制代码。

【讨论】:

  • 是否可以将所有头文件保存到磁盘和编译器根据请求调用它们? C的Build程序是exe格式的。如何将其转换为 COM。
  • 不,不可能。标头定义了来自 libc - 标准 c 库的函数。这个库很大,它使用操作系统来工作。如果没有操作系统,就没有 libc。 (通常的 libc 不能工作;如果在分区之前使用额外的扇区,则没有 libc 可以容纳 512 字节或 10 KB,例如在 grub 中用于 FS 代码)
猜你喜欢
  • 2013-08-05
  • 1970-01-01
  • 2015-05-06
  • 2019-07-04
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多