对应原书第五章,与原书步骤大致相同(注意部分代码及代码解释在原书中有所以没有贴出,本系列博客需结合原书食用)这一篇中编译链接时需要注意将默认64位改为32位,与原书有略微不同,具体见下编译代码
实验1:汇编版Hello World
// 生成hello.o
nasm -f elf hello.asm -o hello.o
// 生成hello,注意转成32位,与原书不同
// 原书:ld -s hello.o -o hello
ld -m elf_i386 -s hello.o -o hello
执行./hello
输出Hello, world!
实验2:汇编+C混编版Hello World
// 生成hello.o
nasm -f elf foo.o -o foo.asm
// 生成bar.o,注意转成32位,与原书不同
// 原书:gcc -c -o bar.o bar.c
gcc -m32 -c -o bar.o bar.c
// 生成foobar,注意转成32位,与原书不同
// 原书:ld -s foobar -o foo.o bar.o
ld -m elf_i386 -s foobar -o foo.o bar.o
执行./foobar
输出the 2nd one
实验3:loader加载ELF(Executable and Linkable Format)
nasm -f elf -o kernel.o kernel.asm
// 生成kernel.bin,注意转成32位,与原书不同
// 原书:ld -s -o kernel