zoukankan      html  css  js  c++  java
  • 操作系统Lab1 详解(boot|kern/debug)

    总体 : boot kern libs tools

    boot#

    asm.h
    bootmain.c
    bootasm.S

    asm.h##

    汇编头文件
    SEG_NULLASM 定义一个空段描述符
    SEG_ASM 使用参数type base lim 生成一个断描述符的宏
    定义了 Appllication segment type bits type 字段的相应定义

    bootasm.S##

    控制前初始化,具体过程 参考 前初始化

    bootmain.c##

    包括了 等待硬盘响应
    读取扇区
    加载到内存段(一个一个的读取扇区)

    bootmian 函数 所谓bootloader 的起点
    读取第一个扇区 根据读取到的内容 加载剩余的内存段(根据program header的内容)
    跳转到内核起点

    kern/debug#

    包含一些debug 函数
    print_kernel_info
    print_stackframe
    print_debuginfo

    辅助函数简析:
    stab_binsearch //给定符号表, 左界限 ,右界限 给定一种符号类型 ,
    给一个地址。 返回的左界限是这个地址左侧第一个满足条件的符号,
    右界限是这个地址右侧第一个满足条件的符号-1,

    eipdebuginfo 结构体包括 eip_file 文件名 行号 调用函数名 函数名长度 函数起始地址 参数数量

    使用extern 定了了 如下几个变量 _stab_BEGIN END _STABSTR_BEGIN 灯对应的变量
    都是kenerl 对应的地址

    首先找到对应的 源文件 在符号表中查找

    然后找到对应的函数(有找不到的可能 ,也许正处于汇编函数中)

    最后查找对应的 行号

    然后查找参数个数

    print_kerninfo(void){ //打印了一些kernel 中的段的位置
    }

    print_debuginfo() 输出这个地址的相关函数信息

    readeip : 输出 eip 当前的值

    print_stackframe(void)
    作业内容,在stack 上 反复回退输出栈帧信息

  • 相关阅读:
    protobuf 协议 windows 下 C++ 环境搭建
    protobuf 协议 windows 下 java 环境搭建
    ProtocolBuffers (二) android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】
    C++ ofstream和ifstream详细用法
    C# 关于out和ref的问题
    java 解析office文件 大全
    Ezhuang
    IOS
    Android Client and PHP Server
    一个IM开源项目LiteTalk
  • 原文地址:https://www.cnblogs.com/sfzyk/p/9021882.html
Copyright © 2011-2022 走看看