3

互联网上似乎有很多关于编写以下 3 个引导加载程序的相同信息:

  1. 无限循环jmp $
  2. 打印单个字符
  3. 打印“你好世界”。

这太棒了,我已经轻松完成了这 3 个变体。

我想用 C 语言编写一些 32 位或 64 位代码并对其进行编译,然后从引导加载程序中调用该代码......基本上是一个引导加载程序,例如,将计算机设置为运行一些简单的数值模拟。例如,我将从列出素数开始,然后可能是用户的一些输入/输出,以计算傅里叶变换。我不知道。

我还没有找到任何关于如何做到这一点的信息,但我什至在开始之前就已经预见到了一些问题。

首先,编译 C 程序会将其编译为几个不同文件之一,具体取决于目标. 对于 Windows,它是一个 PE 文件。对于 Linux,它是一个 .out 文件。这些文件都完全不同。在我的例子中,目标不是 Windows 或 Linux,它只是我在引导加载程序中编写的任何内容。

其次,实际代码将驻留在哪里?引导加载程序正好是 512 字节,但我用 C 编写的程序肯定会编译成更大的东西。它需要放在我的(虚拟)硬盘上,可能在某种文件系统中(我什至还没有定义!),我需要在考虑执行之前将此文件中的信息加载到内存中它。但据我了解,这一切都比 12 行“Hello World”引导加载程序复杂很多很多数量级。

所以我的问题是:如何从我的 16 位引导加载程序调用大型 32 位或 64 位程序(用 C/C++ 编写)。

4

1 回答 1

4

这是一个巨大的话题。

您可能应该从学习进入和了解保护模式开始。

于 2012-10-29T04:58:43.033 回答