操作系统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 上 反复回退输出栈帧信息

猜你喜欢

转载自www.cnblogs.com/sfzyk/p/9021882.html