第五篇 直接面向系統資源的0號中斷處理

來源:互聯網
上載者:User

學習彙編的一個重要目的就是獲得面對底層編程的經驗。

這也就是說有的時候我們這些編程者應該繞開作業系統,直接面向硬體要資源。當然,這

在某種程度上是不安全的。但請別忘了,我們在寫彙編。

 

一、簡單介紹下博文的目標

這篇博文主要是改寫0號中斷(除法溢出)的入口地址,使之執行編程者自己編寫的中斷處理

程式。系統提供的0號中斷服務程式做法是列印divide overflow!,然後返回。新的中斷服務

程式的目標是在螢幕中央列印overflow!,然後返回。

那麼,怎麼怎樣體現直接向硬體要資源呢?舉個例子,我們知道普通的子程式實在編譯的時候

由系統分配一個安全的記憶體空間儲存之。我寫的新的中斷程式則不這樣了,剖析器可以發現,

我是直接將新的中斷服務程式,拷到了記憶體0000:0200開始的空間。

到這裡,細心的讀者可能就會有兩個疑問了。

1、我們雖然強調直接面向系統資源(這裡主要是記憶體)編程,但我們總不能什麼也不管什麼也

不顧吧,本著破壞的目的吧?

2、為什麼將中斷服務程式寫到記憶體0000:0200開始的地區呢?

回答這兩個問題之前我們先來看看利用debug的D命令,查看記憶體0000:0200開始的256個位元組的

內容。

到這裡,上述的兩個問題都可以迎刃而解了。從0000:0200開始的記憶體地區雖然是系統存放

中斷向量表的地區,但顯然,系統沒有提供那麼多的中斷,這地區為空白。另外,由於這段區

域啥也沒有,我們向這裡寫東西也一般不會引起不安全的事。

 

二、代碼

data segmenthint db 'overflow!','$'addr dw ?,?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,ax;將新中斷服務程式直接複製到地址0000:0200,此處不再向作業系統申請記憶體mov cx,offset doend - offset dostartmov si,offset dostartmov ax,seg dostartmov ds,axmov ax,0000hmov es,axmov di,0200hcldrep movsbmov ax,0mov es,ax;儲存原中斷地址mov ax,es:[0*4]mov addr[0],axmov ax,es:[0*4+2]mov addr[2],ax;寫入新中斷地址climov word ptr es:[0*4],0200hmov word ptr es:[0*4+2],0000hsti;產生除法溢出0號中斷mov ax,0ffffhmov bh,1div bhmov ah,4chint 21hdostart:;顯示字串overflow!mov ax,datamov ds,ax;以下注釋的部分是調用DOS功能調用在螢幕上列印字串;mov dx,offset hint;mov ah,9;int 21h;直接向顯存b8000:bffff內寫入內容,也可以在螢幕上顯示mov si,offset hintmov ax,0b800hmov es,axmov di,12*160+36*2   ;設定在螢幕中央顯示mov cx,9again:mov al,[si]mov es:[di],alinc siadd di,2loop again;將原中斷服務程式地址寫回climov ax,0mov es,axmov ax,addrmov es:[0*4],axmov ax,addr[2]mov es:[0*4+2],axsti;程式退出mov ah,4chint 21hdoend:nopcode endsend start

 

三、結果

 

四、代碼中提到了兩種列印overflow!方法。

1、DOS的功能調用-int 21h,利用其中的9號功能即可列印。其中,要將要列印的內容的首地址放到

ds:dx中,並且要列印的字串要以$結尾。

2、直接要顯存空間寫資料,寫入的資料會顯示在螢幕上。

註:如果對顯存不瞭解的可以到這裡查看顯存介紹及編程

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.