bochs調試保護模式程式

來源:互聯網
上載者:User

版本1:載入img直接使用設定檔,可以使用斷點!!

    保護模式的程式沒有辦法直接調試。所謂的直接調試,指的是使用debug這樣工具

 

進行的調試,無論是debug32 還是傳說中的softice for dos 都不可以。唯一的方法是在

 

虛擬機器上進行的調試。有一款虛擬機器,就是專門為這樣的事情設計的。他就是BOCHS。

 

    關於這個軟體的使用,在此就不介紹了。主要說一下如何進行保護模式的程式的調試。

 

第一個問題是:Bochs是為了調試保護模式的作業系統設計的。就是說,從引導過程開始的

 

程式,而不是已經進入了純dos,再進入保護模式的程式。對於這個問題,我們的思路是,

 

設定好斷點,進入dos之後,讓我們的程式觸發中斷即可…….

 

查一下Bochs的手冊,上面有記憶體讀寫的中斷,於是首先選擇了這樣的指令:

 

      watch read [addr]

 

    但是隨後發現,不知道為什麼,程式無法觸發這樣的中斷。也許是因為addr給出的

 

地址是線性地址,而我們的程式,最開始,只能觸發[seg:ofs]這樣的地址。(說明:我發現

 

Bochs中,即使這兩種格式即使指向相同的物理地址,對斷點來說也是不同的)。

 

     第二個問題就是:設定一種容易實現的斷點,最終,發現Bochs在執行斷點上是可以

 

區分的。我們只要設定一個絕對執行的位置就可以了。編寫程式如下:

jmpSeg              equ              600*1024 /16              ;打算修改的段

mov              ax,jmpSeg

mov              ds,ax                                                                      ;ds=打算修改的段

xor              si,si

mov              ax,ds:[si]                                                        ;修改 ds:0 的位置

push              ax                                                                      ;安全起見,在堆棧儲存這個位置的值

mov              byte ptr ds:[si],0CBh                            ;將這個位置設定為 retf

push              offset              back                                                        ;設定返回位置

push              cs

db              0EAh                                                                      ;遠跳轉

dw              0

dw              jmpSeg

back:                                                                                    ;跳過去後馬上回來

pop              ax

mov              ds:[si],ax                                                        ;再恢複下面就是繼續執行了

 

    思路就是我們在記憶體中挖出一個絕對位置的“洞”,然後程式跳進這個洞,這個洞裡面

 

放的是返回,一下又回來。只要我們監視這個洞就好了。當然,安全起見,這個洞最後還要

 

再添上。另外,這個洞選擇的位置,我只是隨便選在600K的位置,其實還可以選擇在[40:0]

 

這一片位置,不過我想在虛擬機器運行過程中,可能會讀這個位置,需要運行幾次才可以,

 

操作上比較麻煩就沒有選擇。

 

    程式做好了命名為bo.asm,編譯為bo.exe。格式化一張磁碟片,放上dos系統的那三個

 

必要的檔案,再考上bo.exe. 之後,將磁碟片做成img檔案(我一般用hdcopy).這個img要

 

丟到bochs的目錄下,就是的目錄中。

  

          1.,運行bochsdbg

 

     2.選擇3,我們要讀入bo.img

    3.選擇10

   4.選擇1

    5.分別輸入 bo.img  auto 最後一項直接斷行符號

 

     6.不斷斷行符號,一直返回到第一個畫面

    7.這個就是第一個畫面了,斷行符號,開始運行

    8.開始運行了,會在類比第一條指令開始的時候停下來

 

  9

.輸入 vb 0x9600:0 下斷點

 

  10.輸入 c 讓它繼續執行

 

11.模擬器這邊就進入dos了~

 

12.運行 bo.exe 看,停在我們設定的斷點了。

 

   這個位置也算是程式的開始,下面可以使用s命令跟蹤了~

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.