這篇博文是對Lab 1中的Exercise 2的解答~ Lab 1 Exercise 2: 使用GDB的'si'命令,去追蹤ROM BIOS幾條指令,並且試圖去猜測,它是在做什么。但是不需要把每個細節都弄清楚。 答: 在這里我們將盡可能的去分析每一條指令,由於題目中說我們只需要 ...
Lab Exercise 為了能夠更好的了解在x 上的C程序調用過程的細節,我們首先找到在obj kern kern.asm中test backtrace子程序的地址, 設置斷點,並且探討一下在內核啟動后,這個程序被調用時發生了什么。對於這個循環嵌套調用的程序test backtrace,它一共壓入了多少信息到堆棧之中。並且它們都代表什么含義 答: 先找到這個子程序的地址,打開obj kern k ...
2016-03-10 14:37 2 2302 推薦指數:
這篇博文是對Lab 1中的Exercise 2的解答~ Lab 1 Exercise 2: 使用GDB的'si'命令,去追蹤ROM BIOS幾條指令,並且試圖去猜測,它是在做什么。但是不需要把每個細節都弄清楚。 答: 在這里我們將盡可能的去分析每一條指令,由於題目中說我們只需要 ...
Lab 1 Exercise 5 再一次追蹤一下boot loader的一開始的幾句指令,找到第一條滿足如下條件的指令處: 當我修改了boot loader的鏈接地址,這個指令就會出現錯誤。 找到這樣的指令后,把boot loader的鏈接地址修改一下,我們要在boot ...
Lab 1 Exercise 3 設置一個斷點在地址0x7c00處,這是boot sector被加載的位置。然后讓程序繼續運行直到這個斷點。跟蹤/boot/boot.S文件的每一條指令,同時使用boot.S文件和系統為你反匯編出來的文件obj/boot/boot.asm。你也可以使用GDB的x ...
Lab 1中Exercise 9的解答報告 Exercise 1.9: 判斷一下操作系統內核是從哪條指令開始初始化它的堆棧空間的,以及這個堆棧坐落在內存的哪個地方?內核是如何給它的堆棧保留一塊內存空間的?堆棧指針又是指向這塊被保留的區域的哪一端的呢? 答: 1. 首先需要判斷 ...
Exercise 1.8 我們丟棄了一小部分代碼---即當我們在printf中指定輸出"%o"格式的字符串,即八進制格式的代碼。嘗試去完成這部分程序。 解答: 在這個練習中我們首先要閱讀以下三個源文件的代碼,弄清楚他們三者之間的關系: 三個文件分別為 \kern ...
Part 3 Kernel Address Space JOS把32位線性地址虛擬空間划分成兩個部分。其中用戶環境(進程運行環境)通常占據低地址的那部分,叫用戶地址空間。而操作系統內核總是占據高地址的部分,叫內核地址空間。這兩個部分的分界線是定義在memlayout.h文件中的一個宏 ULIM ...
Lab 1 Part 3: The kernel 現在我們將開始具體討論一下JOS內核了。就像boot loader一樣,內核開始的時候也是一些匯編語句,用於設置一些東西,來保證C語言的程序能夠正確的執行。 使用虛擬內存 在運行boot loader時,boot loader中的鏈接 ...
Lab 1: Booting a PC Part 1: PC Bootstrap 介紹這一部分知識的目的就是讓你能夠更加熟悉x86匯編語言,以及PC啟動的整個過程,而且也會首次學習使用QEMU軟件來仿真xv6操作系統,並且配合GDB對操作系統的運行進行調試。 開始學習X86匯編語言 ...