歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 利用Bochs調試Linux 0.11啟動過程圖解

利用Bochs調試Linux 0.11啟動過程圖解

日期:2017/2/28 16:13:39   编辑:Linux教程

  摘要:現在hack linux kernel的人很多,而調試工具很少,Bochs的最大的好處就是它的調試功能,它能仿真IA-32的全部指令,所有這些都是用C++寫成的,並且開源。

  名詞:Bochs

  Bochs是Kevin Lawton 用C++語言開發的一個仿真軟件系統。主要用來仿真x86的系統軟件。和VMware,Virtual PC 仿真軟件相比,速度很慢,但Bochs的最大好處是它的單步調試功能。

  下面我們主要來講述如何用bochs的單步調試功能對linux的啟動過程進行調試,從而了解linux是如何啟動的。

  在講述之前,首先我搭配了一個Bochs環境:

  1) Bochs的執行文件

  2) Linux映像文件

  我選用了linux 早期的內核版本進行調試,0.11版,主要原因是0.11版網上有很多已經編譯制作好的內核映像文件,而其0.11版的引導啟動程序結構和最版內核基本上是一樣的。

  當機器啟動的時候,i386系統中BIOS做最初的引導工作。就是把可啟動設備的第一個分區的第一個扇區加載到實模式地址0x7c00上,然後將控制轉交給它。所以我們可以在地址0x7c00處設置斷點,然後讓系統執行到這個地方

  命令:vbreak 0x0000:0x7c00 或則(b 0x00007c00),設置斷點。

  C,繼續執行,遇到斷點,停止

  如圖:

  這個時候mov ax,0x7c0指令正好是linux啟動程序bootsect.S的第一個有效指令(在bootsect.S中為

start:

mov ax,#BOOTSEG)。說明BIOS在執行到0x7c00的時候,把控制權轉移到了linux啟動程序了。Linux 啟動程序包括三個文件。他們分別是:

  Bootsect.S ,setup.S,head.s,他們都是由匯編寫成的,這三個程序按一定的順序執行各自不同的功能能來完成整個從引導到啟動的整個過程。

  啟動順序是:BIOS--Bootsect.S--setup.S--head.s---main.c

  Bootsect.S代碼是磁盤引導塊程序。它的主要功能是:

  1)把自己移到內存絕對地址0x90000的開始處,並跳到那裡執行,也就是地址0x9000:0x0000處

  2)用13號BIOS中斷來讀磁盤的從第2個扇區開始的連續4個扇區內的內容,這部分內容就是setup程序模塊,然後把這個內容放到bootsect緊接的後面。也就是地址0x90200.為什麼是0x90200呢?後面要說道。

  3)把system模塊讀到內存0x10000地方。這個system模塊大小必須小於0x90000-0x10000=0x80000 也就是512k字節。

  關於setup.S和head.s兩個文件的功能和作用等調試到的時候在介紹。

  繼續往下調試,我們用反匯編從現在開始的10條指令。

  指令介紹:u /10 ,u是反匯編指令,這個指令意思反匯編當前開始的10條指令並打印出來。注意這並不是程序執行的指令。

  如圖:

Copyright © Linux教程網 All Rights Reserved