上QQ阅读APP看书,第一时间看更新
1.5.4 Guest
接下来我们实现一个非常小的Guest,由于它足够小,所以基本不会发生Bug。这个Guest就是一个简单的无限循环,也不运行任何敏感指令:
// guest/kernel.S .code16gcc .text .globl _start .type _start, @function _start: 1: jmp 1b
这个Guest的内核中没有任何文件格式解码器,需要将Guest编译为无格式的,因此我们需要使用objcopy从ELF格式转换为binary格式,代码从地址0开始。这个Guest没有任何依赖,所以不连接任何其他的第三方库,最终Makefile如下:
// guest/Makefile BIN := kernel.bin ELF := kernel.elf OBJ := kernel.o all: $(BIN) $(BIN): $(ELF) objcopy -O binary $< $@ $(ELF): $(OBJ) $(LD) -Ttext=0x00 -nostdlib -static $< -o $@ %.o: %.S $(CC) -nostdinc -c $< -o $@ clean: rm -rf $(OBJ) $(BIN) $(ELF)