【发布时间】:2013-10-14 17:15:12
【问题描述】:
考虑到 C 是一种系统编程语言,我如何将 C 代码编译成可以在没有操作系统的情况下调用的原始 x86 机器代码? (IE:你可以假设我有一个引导扇区,它将原始机器代码从磁盘加载到内存中,然后直接跳转到第一条指令)。
现在,加分:理想情况下,我想使用 Visual Studio 2010 的编译器进行编译,因为我已经有了它。如果做不到这一点,那么完成任务的最佳方法是什么,而不必安装一堆依赖项或不必对整个系统进行大规模的全面配置更改?我会在 Windows 7 上编译。
【问题讨论】:
-
编译器实际上并没有添加“操作系统特定的东西”(你不应该计算 DOS、Windows 或 Linux 系统调用——它们在库中)。您应该关注的加载程序由链接器添加。例如,著名的“您需要 Windows 才能运行此程序”“DOS”存根可以轻松更改为另一个存根。 (每个在 Windows 下长大的人都不会知道我在说什么……)所以,检查一下 Visual Studio 中的链接器选项。如果没有,则编译为 .obj 代码并使用外部链接器。
标签: c compiler-construction machine-code