摘要: 实际上,我们要做的工作是根据内核的Program header table的信息进行类似下面这个C语言语句的内存复制: memcpy(p_vaddr, BaseOfLoaderPhyAddr+p_offset, p_filesz); 复制可能不止一次,如果Program header有n个,复制就进 阅读全文
posted @ 2016-04-17 18:47 是非猫 阅读(1861) 评论(0) 推荐(0) 编辑
摘要: 现在,内核已经被我们加载进内存了,该是跳入保护模式的时候了。 首先是GDT以及对应的选择子,我们只定义三个描述符,分别是一个0~4GB的可执行段、一个0~4GB的可读写段和一个指向显存开始地址的段: 在之前学习保护模式时,大部分描述符的段基址都是运行时计算后填入相应位置的,因为那时我们的程序是由BI 阅读全文
posted @ 2016-04-17 14:50 是非猫 阅读(645) 评论(0) 推荐(0) 编辑
摘要: Loader要做两项工作,我们先来做第一项,把内核加载到内存: 1.加载内核到内存。 2.跳入保护模式。 首先编译无内核时: nasm boot.asm -o boot.bin nasm loader.asm -o loader.bin dd if=boot.bin of=a.img bs=512 阅读全文
posted @ 2016-04-17 12:50 是非猫 阅读(538) 评论(0) 推荐(0) 编辑