- 深度探索Linux系统虚拟化:原理与实现
- 王柏生 谢广军
- 129字
- 2021-03-27 06:30:49
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; } }