如何将一个C程序编译成有效的ELF格式(或RAW格式),以便可以直接从RAM中执行,而无需任何操作系统(OS)?假设存在一个引导程序(bootloader),它能够将代码加载到RAM中的任何位置,并在该地址处开始执行。确切地说,需要哪些编译器(GCC)标志?是否需要映射文件?
欢迎提供一个helloworld应用程序示例:)
详细说明一下我的观点,让main()方法成为一个空的无限循环,以确保不使用任何OS特定或标准库调用。期望的输出是“hang”。使用通常的GCC选项,引导程序肯定无法加载可执行文件,告诉它这是无效的ELF格式。然而,通过向链接器传递-dN选项,将使其成为有效的ELF。还需要更多的编译器/链接器选项才能使其“hang”而不会崩溃!到底是哪些编译器选项呢?
欢迎提供一个helloworld应用程序示例:)
详细说明一下我的观点,让main()方法成为一个空的无限循环,以确保不使用任何OS特定或标准库调用。期望的输出是“hang”。使用通常的GCC选项,引导程序肯定无法加载可执行文件,告诉它这是无效的ELF格式。然而,通过向链接器传递-dN选项,将使其成为有效的ELF。还需要更多的编译器/链接器选项才能使其“hang”而不会崩溃!到底是哪些编译器选项呢?
file.c:
int main()
{
while(1);
}
编译
使用gcc命令对file.c进行编译:gcc -c -nostdinc -fno-builtin file.c
使用ld命令将file.o链接为可执行文件:ld -dN -nostdlib file.o
引导加载器将a.out文件加载到RAM中并执行。