ucore实验
文章平均质量分 56
hacwalker
这个作者很懒,什么都没留下…
展开
-
ucore lab1
任务一: 首先,我进行了makefile文件的分析,分析结果使用另一个文档表示了出来。 可以看到在bin目录下生成了ucore.img文件,此时可以在lab1文件夹下执行make qemu可以显示 This is a bootloader: Hello world! 一个被系统认为符合规范的硬盘主引导扇区的特征是什么? 通过对sign.c文件的分析可知,在文件中存在原创 2013-01-30 18:12:52 · 1455 阅读 · 0 评论 -
ucore lab1 任务二
任务二: 1. 首先开启qemu调试模式. 开启gdb调试工具,连接到qemu中: 2. 从0xfff0开始单步跟踪BIOS的执行 从上图可看出本身执行就是从fff0执行的,进行反汇编得到的结果为: 3. 在初始化位置0x7c00设置实地址断点,测试断点正常。 首先设置断点: 然后运行程序执行到断点处:原创 2013-01-30 18:19:37 · 762 阅读 · 0 评论 -
ucore lab1 任务三
任务三:查看BIOS中前6条指令的内容,参考PHIL STORRS I/O PORTS DESCRIPTION大致了解并说明这些指令的含义。 使用gdb进行调试,结果如下图所示: 发现指令并不是真正的指令,具体问题现在不太明白. 但是使用qemu进行本地调试可知如下结果: 但是经过上机操作发现在QEMU本地调试下,step命令无法发挥作用。 为了完成实验,我采取了以原创 2013-01-31 00:15:32 · 1054 阅读 · 0 评论 -
ucore lab1 任务四
任务四: Bootloader如何做准备并进入保护模式的? 通过查询相关指令含义总结bootasm.s的具体执行流程为: 首先在实模式下运行---〉打开A20端口---〉加载GDTR,进入保护模式---〉调用bootmain函数 .setPROT_MODE_CSEG, 0x8 #kernel code原创 2013-01-31 00:42:52 · 1136 阅读 · 0 评论 -
ucore lab1 任务五
通过阅读bootmain.c,了解bootloader如何加载ELF文件。分析bootloader如何读取硬盘扇区的 以及bootloader如何加载ELF格式的OS。 首先我们来分析BOOTMAIN.C文件 bootmain(void) { // read the 1st page off disk readseg((uintptr_t)ELFHDR, SEC原创 2013-02-01 08:21:12 · 1128 阅读 · 0 评论 -
ucore lab1 任务六
任务六: 1.首先要明白什么是函数调用堆栈(上网查资料) 分析下述代码的堆栈调用 int Add(int x, int y) { return x + y; } void main() { int *pi = new int(10); int *pj = new int(20); int result = 0; result = Add(*pi,*pj);原创 2013-02-01 08:21:48 · 945 阅读 · 0 评论 -
ucore lab1 任务七
任务七: 1.中断向量表中一个表项占用多少字节? 2.完成初始化函数idt_init 3.完成中断处理函数trap() 实验过程: 中断向量表中一个表项的代码为: struct gatedesc { unsignedgd_off_15_0 : 16; // low 16bits of offset in segment unsig原创 2013-02-16 21:40:05 · 822 阅读 · 0 评论