1. 程式人生 > >操作系統Lab1 詳解(boot|kern/debug)

操作系統Lab1 詳解(boot|kern/debug)

segment frame gin tabs program its 內容 AC 描述

總體 : 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 上 反復回退輸出棧幀信息

操作系統Lab1 詳解(boot|kern/debug)