Archive

Archive for January, 2018

C语言如何编译出一个不需要操作系统的程序

January 3rd, 2018 No comments

来个更短的,没有其他乱七八糟的东西,只有一个简短的 C文件,不需要 linux 环境:

miniboot.c

asm(".long 0x1badb002, 0, (-(0x1badb002 + 0))");

unsigned char *videobuf = (unsigned char*)0xb8000;
const char *str = "Hello, World !! ";

int start_entry(void)
{
    int i;
    for (i = 0; str[i]; i++) {
        videobuf[i * 2 + 0] = str[i];
        videobuf[i * 2 + 1] = 0x17;
    }
    for (; i < 80 * 25; i++) {
        videobuf[i * 2 + 0] = ' ';
        videobuf[i * 2 + 1] = 0x17;
    }
    while (1) { }
    return 0;
}

编译:

gcc -c -fno-builtin -ffreestanding -nostdlib -m32 miniboot.c -o miniboot.o
ld -e start_entry -m elf_i386 -Ttext-seg=0x100000 miniboot.o -o miniboot.elf

运行:

qemu-system-i386 -kernel miniboot.elf

结果:

满足条件:

  • 只用纯 C 开发,可以使用 gcc 编译
  • 编译出来的东西真的可以运行
  • 不需要依赖操作系统
  • 不需要包含系统调用的 glibc
  • 连 libgcc 都不需要

解释一下:

Read more…

Categories: 编程技术 Tags: ,
Wordpress Social Share Plugin powered by Ultimatelysocial