zoukankan      html  css  js  c++  java
  • ucore-lab1-练习2report

    练习二实验报告

    1.从CPU加电后执行的第一条指令开始,单步跟踪BIOS:
      1.1默认的gdb需要进行一些额外的配置才能进行qemu的调试任务,qemu和gdb之间使用网络端口1234进行通信。
    lab1/tools/gdbinit的内容如下。可见,这里是对内核代码进行调试,并且将断点设置在内核代码的入口地址,即kern_init函数:
       
    为了从CPU加电后执行的第一条指令开始调试,修改lab1/tools/gdbinit,内容为:
       
      1.2 通过上一个步骤gdb可以连接qemu,此时qemu会进入停止状态,听从gdb的命令。另外,可能需要qemu在一开始便进入等待模式,则不再使用make qemu开始系统的运行,而使用make debug来完成这项工作,并且将gdbinit中的‘continue’指令删掉。这样qemu便不会在gdb未连接的时候擅自运行了。在lab1目录下执行’make debug’ :
       
    然后弹出qemu和debug窗口(在Makefile文件中定义):
       
    但我这里在本应该显示反汇编代码的地方显示为‘??’,在网上查了之后觉得可能的原因是qemu和gdb不兼容,解决办法是在gdb中添加:
       
    该命令可以强制反汇编当前ip所指向的指令,效果如下:
       
    使用si指令单步执行一条机器指令,实现单步跟踪BIOS:
       
     
    2.在初始化位置0x7c00设置实地址断点,测试断点正常:
    在gdb中输入:‘b *0x7c00’       //设置断点
             ’c‘                //继续正在调试的程序
     
    可以看到程序运行到0x7c00处停下来,并显示当ip指向的汇编指令--’cli‘。
     
    3.从0x7c00开始跟踪代码运行,将单步跟踪反汇编得到的代码与bootasm.S和bootblock.asm进行比较:
    在断点0x7c00处多次执行’x /10i $pc’    //查看后面10条汇编指令
       
    发现在执行’bootmain‘之前的指令与bootasm.S和bootblock.asm中的指令一致。
     
    4.自己找一个bootloader或内核中的代码位置,设置断点并进行测试:
    4.1将gdbinit改成原来的命令,即对内核代码进行调试,并且将断点设置在内核代码的入口地址,即kern_init函数;
    4.2执行’make debug‘;    //程序进入init.c中的kern_init()
    4.3‘b cons_init’          //设置断点,这是初始化console的函数
    ’c‘                   //继续执行正在调试的程序
    4.4遇到断点,在console.c程序的cons_init()函数处终止:

       
     

  • 相关阅读:
    Report studio交叉表求指定维度和的问题
    Cognos清除本地高速缓存的利与弊
    学习技巧-如何在IBM官网寻找学习资料
    Cognos利用DMR与文本对象设计中国式报表
    Cognos Report Studio 链接查询需要注意的地方2
    linux下自己下载的程序装哪?
    maven编译war包,pom中必须有的几个dependency
    跨站请求伪造解决办法之——过滤referer
    tomcat禁用webdav
    Tomcat配置https
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/10596934.html
Copyright © 2011-2022 走看看