gpt4 book ai didi

c - 无操作系统执行

转载 作者:IT王子 更新时间:2023-10-29 00:13:27 26 4
gpt4 key购买 nike

如何将 C 程序编译成有效的 ELF 格式(或 RAW 格式),以便它可以直接从 RAM 执行而无需任何 OS ?假设存在一个能够将代码加载到 RAM 中的任何位置并从该地址开始执行的引导加载程序。准确地说,编译器(GCC)标志应该是什么?是否需要 map 文件?

欢迎提供示例 helloworld 应用程序 :)

只是为了阐述我的观点,
让 main() 方法成为一个空的无限 while 循环,以确保不使用 OS 特定或标准库调用。所需的 o/p 是挂起。使用通常的 GCC 选项,引导加载程序肯定无法加载可执行文件,告诉它是无效的 ELF 格式。然而,通过将 -dN 选项传递给链接器将使它成为一个有效的 ELF。需要更多的编译器/链接器选项才能使其挂起而不是崩溃!!这些编译器选项到底是什么?

file.c:
int main()
{
while(1);
}

编译
gcc -c -nostdinc -fno-builtin file.c
ld -dN -nostdlib 文件.o

引导加载程序将 a.out 加载到 RAM 并执行。

最佳答案

首先,一旦引导加载程序完成其工作,您可以做的事情就会受到限制。这些限制是由于以下原因:(假设您的引导加载程序(例如:grub)带您进入 32 位保护模式)1.没有启用分页。您需要启用它。2. 您无法与设备交互,因为您必须为 IRQ 设置处理程序。

这是我用来学习裸机编程艺术的经典链接(http://geezer.osdevbrasil.net/osd/index.htm)。此外,页面上还有一个下载链接 ( http://geezer.osdevbrasil.net/osd/code/osd.tgz )。tar 文件包含越来越复杂的演示内核。此外,您可以查看 make 文件 (linux.mak),并获取 gcc 所需的标志。

我打开了一个随机的 make 文件,发现使用了以下标志:gcc : -nostdinc -fno-builtinld: -nostdlib
(对链接器进行了显式调用,因此 ld 也需要一个标志)。

标志的目的是告诉 gcc 不能与标准库进行链接。

关于c - 无操作系统执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/713734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com