上QQ阅读APP看书,第一时间看更新
1.5.5 加载Guest镜像到内存
在初始化VCPU时我们将代码段cs设置为0xf000,将rip设置为0,所以这里需要将Guest镜像加载到Guest的内存地址(0x1000<<4)+0x0处。Guest的物理内存的起始地址为ram_start,所以加载Guest镜像到内存的代码如下:
void load_image(struct vm *vm) { int ret = 0; int fd = open("./guest/kernel.bin", O_RDONLY); if (fd < 0) { fprintf(stderr, "can not open guest image\n"); exit(-1); } char *p = (char *)vm->ram_start + ((0x1000 << 4) + 0x0); while (1) { if ((ret = read(fd, p, 4096)) <= 0) break; p += ret; } }