在qemu+gdb的调试环境中,gdb的b命令生效地址必须是虚拟机的物理地址,但是OS中运行的程序大部分都是以虚拟地址出现的,所以计算出真实的物理地址才能下断点。
MIT6.828的LAB1中的内核代码中,内核段基址为0x10000000(可由kern/entry.S中的mygdt标号下的数据计算得到),这样如果一个虚拟地址是0xF010013A(kern/init.c中i386_init()函数入口),那么它的物理地址就是0x0010013A,要在这个地方设置断点才有效。同理由于gdb调试的时候引入符号文件可以看到源码,而在kernel中调试时候看到的源码也都是基于虚拟地址的,所以用源码行号或者函数作为断点同样不会起效。
bochs在这点上就做的比较友好,它可以设置三种地址类型的断点,虚拟地址(vb),线性地址(lb),物理地址(pb|b)。在调试kernel的前期,没有开启分页,所以线性地址等同于物理地址,如果想根据源码的虚拟地址来设置断点调试,就使用vb命令来设置。格式如下:
vb seg:offset
例如段选择符为8,偏移为0xF010013A(i386_init()函数入口)的断点就使用命令:
vb 8:0xF010013A
注意:bochs有个不好的地方就是:不能看源代码。虽然有载入符号文件的功能,但是这个符号文件仅仅是虚拟地址和标号名的符号表,而且我还不知道在什么地方可以用到这些符号,如果哪位同志对这里比较熟悉的话,还麻烦指点一下。
——————————————————————————
晚上,弄了下FB小同学的BadAppleOS,他在windows下编译的。移植到Linux下来编译还出现不少问题,最主要的是符号问题,在编译的过程中汇编中的符号丢失,看了下是section的问题,他定义了一个section,我放到.text下就ok。然后改写一些代码,把它移植到vx5的映像中去,用vx的的引导代码,就不需要grub。
分享到:
相关推荐
MIT 6.828 JOS 操作系统Lab1 - Lab5的全部代码。 MIT 6.828 是精典的操作系统公开课程。同时也是我们对系统学习和认知的很好的课程。作者曾经也苦于没有很好的实践方案让自己更深入的了解操作系统和x86体系机构。...
完成了6个lab必做的execise部分,希望能为大家提供点帮助~
这是JOS mit6.828课程的网站资源,为了学习操作系统,但是害怕这门课的教程总是变来变去,并且配置环镜总是变化,所以把除视频和lab1,lab2...lab7的源代码之外的所有网站的资源全部下载下来了,这样就可以安心的学习...
MIT 6.828 JOS lab3 附件里存放的是lab3的源代码,修改后滴……
mit 6.828 lab1答案 printf.c 里面的是代码的实现 打印8进制数字
MIT6.828 lab4 报告中包含有具体的基础知识和练习的解析,具有很好的学习价值
MIT 6.828 lab3的完整代码, 经试验可以完美运行,在写报告的时候可以参考一下。
Operating System Lecture Notes (MIT 6.828) Operating System Lecture Notes (MIT 6.828)
无论是自己学习还是工作参考都是很好的资源
报告中具有详细的基础知识和每个练习的对应解释,具有很好的学习价值
MIT 6.828 操作系统讲义 MIT 6.828 操作系统讲义 MIT 6.828 操作系统讲义 ===================
git qemu mit6.828
MIT 6.828 操作系统实验.zip
MIT6.828课程实验以及源码
MIT6.828 lab3 报告中包含有具体的基础知识和练习的解析,具有很好的学习价值
这是MIT6.828的个人学习笔记,纳入非计算机专业出身,可能会有太多纰漏,烦请大神斧正。个人认为,操作系统是计算机专业课之中综合性很强的一门课,牵涉面广,知识点多,相对也非常难学。 大名鼎鼎的6.828的最大的...
MIT 的JOS系统,资源里面是lab2的修改后源码
MIT6.S081_3.9- XV6 启动过程1
MIT6.828 lab5 报告中包含有具体的基础知识和练习的解析,具有很好的学习价值
MIT操作系统6.828课程xv6系统,linux下可执行jos实验代码(已验收+HIT),经过修改查重