駐留程序設(shè)計(jì)論文_第1頁(yè)
駐留程序設(shè)計(jì)論文_第2頁(yè)
駐留程序設(shè)計(jì)論文_第3頁(yè)
駐留程序設(shè)計(jì)論文_第4頁(yè)
駐留程序設(shè)計(jì)論文_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、駐留程序設(shè)計(jì)1.前言11.1駐留程序的特點(diǎn)21.2駐留程序的結(jié)構(gòu)22. 駐留程序常用的駐留方法32.1中斷駐留法32.1.1常駐程序基本結(jié)構(gòu)32.2搬遷駐留法42.1.1收尋內(nèi)存控制塊法42.2.2內(nèi)存空閑區(qū)搬遷法62.2.3高端地址搬遷法62.3駐留程序的撤消62.3.1利用dos的int49h功能調(diào)用來進(jìn)行釋放62.3.2修改內(nèi)存控制塊標(biāo)志的釋放方法72.3.3合并內(nèi)存塊法釋放駐留程序72.4避免重復(fù)駐留72.5駐留程序的激活83 駐留程序的調(diào)試和激活83.1 tsr程序中的引導(dǎo)部分83.2 tsr程序中的駐留部分103.3 tsr的激活機(jī)制與方式123.4 防止tsr程序的重復(fù)駐留123

2、.5 tsr程序的調(diào)試124駐留程序設(shè)計(jì)要點(diǎn)135 參 考 文 獻(xiàn)141.前言計(jì)算機(jī)軟件操作系統(tǒng)應(yīng)提供多任務(wù)環(huán)境,這對(duì)于當(dāng)今的操作系統(tǒng)來說,幾乎是不言而喻的,炙手可熱的windows操作系統(tǒng)就是多進(jìn)程環(huán)境的典范.但在dos操作系統(tǒng)與windows操作系統(tǒng)并行不悖的今天,從運(yùn)行速度、功能的靈活性考慮,仍有一些場(chǎng)合需要設(shè)計(jì)短小精悍且實(shí)用性強(qiáng)的dos后臺(tái)應(yīng)用程序。駐留程序(tsr)就是這樣一種應(yīng)用程序。tsr(terminate and stay resident)意為結(jié)束進(jìn)程并駐留,它不同于結(jié)束即退出的一般dos應(yīng)用程序,而是把自身的一部分程序代碼裝入內(nèi)存后將控制返回給dos,這段程序代碼一直潛伏

3、在“后臺(tái)”工作,所占存儲(chǔ)空間受到dos保護(hù)而不會(huì)被其它程序覆蓋.一旦激活tsr程序的條件滿足(如執(zhí)行了相應(yīng)的熱鍵操作),tsr將立即提供自身的服務(wù)功能.由此可見,tsr程序能夠與前臺(tái)程序并行工作且及時(shí)地處理一些事件,為單任務(wù)的dos操作系統(tǒng)增添了多任務(wù)處理能力,優(yōu)化了計(jì)算機(jī)環(huán)境,它是實(shí)用程序中最重要的一種類型,也是一種特殊的編程技術(shù)。駐留程序是一種重要的實(shí)用程序類型.掌握這種技術(shù)可以使程序員在單任務(wù)操作系統(tǒng)環(huán)境下,編寫多任務(wù)程序。駐留程序具有很強(qiáng)的后臺(tái)性能,與一般的程序不同,駐留程序一旦裝載就一直存在且可以隨時(shí)被激活調(diào)用。 駐留程序通過接管中斷而工作,它們?nèi)〈袛喟l(fā)生時(shí)調(diào)用的子程序,修改中斷或

4、接管多個(gè)中斷,以改變中斷操作方式。駐留程序能發(fā)揮很大的作用,但同時(shí)也帶來了許多的編程難點(diǎn).編程不當(dāng)會(huì)導(dǎo)致嚴(yán)重后果:堆棧溢出,屏幕混亂等.伴隨著駐留程序的產(chǎn)生同時(shí)出現(xiàn)了一些與駐留有關(guān)的問題,如:駐留程序的釋放,避免重復(fù)駐留等.妥善地處理好此類問題對(duì)于編寫成功的駐留程序也是很重要的。1.1駐留程序的特點(diǎn)內(nèi)存駐留程序是經(jīng)運(yùn)行后有一部分代碼仍駐留在內(nèi)存中的程序,它一般接管中斷,即把用戶自己編寫的子程序替換或部分替換原有的中斷服務(wù)子程序,同時(shí)修改中斷向量使之指向用戶編寫的子程序。用戶編寫的子程序替換原有的中斷服務(wù)程序后常駐內(nèi)存,并可以在任何時(shí)候被激活。1.2駐留程序的結(jié)構(gòu)內(nèi)存駐留程序一般設(shè)計(jì)成com文件

5、類型,從而它只有一個(gè)段,其基本結(jié)如下:跳轉(zhuǎn)指令駐留部分非駐留部分由于非駐留部分位于程序的尾部,從程序的org 100h處安排一條跳轉(zhuǎn)指令跳轉(zhuǎn)到該部分.駐留部分包括駐留數(shù)據(jù)部分和駐留程序部分,駐留數(shù)據(jù)部分用于保存中間數(shù)據(jù)和原中斷向量,駐留程序部分是用戶設(shè)計(jì)的一個(gè)中斷服務(wù)子程序,駐留程序部分應(yīng)按下述原則設(shè)計(jì):(1)它是一個(gè)far型的過程.(2) 若該程序還要調(diào)用原來的中斷服務(wù)子程序,則用call指令調(diào)用,且調(diào)用之前一定要加一條pushf指令,與中斷服務(wù)子程序的中斷返回指令iret相呼應(yīng)。(3)用戶編寫的中斷服務(wù)子程序必須以iret指令返回.非駐留部分不在內(nèi)存中駐留,其主要功能是保證駐留部分被裝載,

6、它又分為檢查。接管中斷、駐留退出等三部分.檢查部分的功能是檢查是否已安裝了內(nèi)存駐留程序,一個(gè)內(nèi)存駐留程序不應(yīng)多次安裝,因?yàn)槊看伟惭b,將會(huì)占用更多的內(nèi)存。因此安裝成功后,應(yīng)設(shè)置某一標(biāo)記,再次啟動(dòng)內(nèi)存駐留程序時(shí),就應(yīng)檢查該標(biāo)記,如發(fā)現(xiàn)已經(jīng)安裝,則顯示已安裝提示信息,同時(shí)終止安裝.一般借助于未用中斷60h至67h中的某一個(gè)來設(shè)置標(biāo)記.安裝部分主要實(shí)現(xiàn)保存原中斷向量,并把中斷向量指向用戶編寫的駐留子程序.一般分別采用功能號(hào)為35h和25h的dos調(diào)用實(shí)現(xiàn).退出駐留部分的功能是終止程序的執(zhí)行并駐留,在寄存器dx中設(shè)置合適的駐留長(zhǎng)度,并調(diào)用功能號(hào)為31h的dos調(diào)用。2. 駐留程序常用的駐留方法就現(xiàn)有的駐

7、留方法來說,可以分為中斷駐留法和代碼轉(zhuǎn)移方法,即搬遷法。2.1中斷駐留法2.1.1常駐程序基本結(jié)構(gòu)(1) .com文件 常駐程序必須是.con,文件,程序只能加載在一個(gè)段內(nèi),其大小只能小于b4k字節(jié)。 程序分為三部分:第一部分定義了數(shù)據(jù)段和程序在程序中的位置,以及程序的開始地址;第二部分是可執(zhí)行程序;第三部分是程序和段結(jié)束.注意程序執(zhí)行是從地址l00h開始(2)內(nèi)存常駐程序 用于程序駐留的中斷有兩種: a.使用int27h結(jié)束中斷并駐留:該中斷主要用來終止當(dāng)前程序的執(zhí)行,但在內(nèi)存中保留部分或全部代碼,使之不被另一裝人的程序覆蓋。人口參數(shù)為: dx=要保留程序的最后一字節(jié)加1的位移(包括程序段前

8、綴) cs=程序段前綴 in7z7h能保留的最大數(shù)目為64k字節(jié).由于執(zhí)行int 27h結(jié)果改變了int22h ,in723h , int24h的向量,所以它不能用于永久安裝用戶寫的嚴(yán)重錯(cuò)誤處理程序。內(nèi)存常駐程序與.com程序相比多了一部分,即第三部分,這部分使start和inin,之間的程序駐留在內(nèi)存中。b使用int21 h系統(tǒng)調(diào)用功能號(hào)31h,使程序駐留結(jié)束。入口參數(shù):ah=31h al=返回代碼dx=保留內(nèi)存大小(1節(jié)數(shù)“16字節(jié))該中斷普遍用于駐留驅(qū)動(dòng)程序或子程序,它在dos命令級(jí)被調(diào)用一次后,隨后以軟中斷方式提供服務(wù).在調(diào)用前,應(yīng)分配內(nèi)存塊的長(zhǎng)度,程序裝人時(shí),它僅僅處理內(nèi)存分配,該功

9、能優(yōu)先于int27h調(diào)用,因?yàn)樗试S傳送回一返回碼,并有可駐留大于60k字節(jié)的程序。目前中斷駐留法比較常用。2.2搬遷駐留法所謂搬遷法就是采取一定的方法,以獲得內(nèi)存中某一空閑區(qū)的起始地址及大小,之后再將需駐留的程序部分直接搬遷到該地址的空間里,同時(shí)采用某種手段使其不被其他再次裝載的程序覆蓋.用中斷駐留法,使用者無需關(guān)心駐留程序所駐留的具體地址,也不必?fù)?dān)心駐留部分會(huì)破壞系統(tǒng)。而使用搬遷法駐留,稍不注意就會(huì)導(dǎo)致系統(tǒng)癱瘓。此種方法又可以細(xì)分如下。2.1.1收尋內(nèi)存控制塊法(1)dos管理內(nèi)存是通過內(nèi)存控制塊來完成的,內(nèi)存塊包括兩部分:內(nèi)存控制塊mc13;內(nèi)存分配塊maii。內(nèi)存控制塊的大小為1節(jié)(1

10、6字節(jié)),內(nèi)存分配塊的大小要根據(jù)具體程序來確定,其結(jié)構(gòu)如下: 內(nèi)存控制塊mcb :16個(gè)字節(jié),其具體內(nèi)容見表1。 內(nèi)存分配塊maii:程序段前綴psp(100h字節(jié)),內(nèi)存裝載程序部分。表1 (2)int21h的52h一號(hào)保留中斷功能in721h的52h號(hào)中斷功能調(diào)用主要是確定內(nèi)存塊主鏈中第一個(gè)內(nèi)存控制塊mcb的具體地址,根據(jù)第一個(gè)mcb的地址利用公式可計(jì)算出下一個(gè)mcb的具體地址,其調(diào)用格式如下: mov ah, 52h int 211r該操作的返回值為:e:s: (13x一2指向第一個(gè)mci段地址,其偏移地址值為口.下一個(gè)mcb的具體地址的計(jì)算公式是:下一個(gè)內(nèi)存控制塊mcl3段地址二本內(nèi)存

11、控制塊地址+本內(nèi)存分配塊mab大小+1(3)此種駐留方法的具體原理如下: 通過int21 h一號(hào)的52h號(hào)子功能調(diào)用確定第一個(gè)mcb段地址,然后根據(jù)第一個(gè)mcb段地址分別計(jì)算出其他mcb段地址,在獲得其他mcb段地址的過程中,分別查看該mcb的第o1和02位的值是否為0,為0則表示該內(nèi)存塊為空閑塊,即可將需駐留部分直接移到該空閑塊中,實(shí)現(xiàn)駐留。具體作法是:在查出_內(nèi)存塊為空閑塊后,將本內(nèi)存塊的分配塊的大小減去需駐留部分的大小,然后再將其差值放回到mcb的相應(yīng)位中,之后再將需駐留的部分搬遷到原屬于本內(nèi)存塊,而現(xiàn)在本mcb管理不著的空間中。2.2.2內(nèi)存空閑區(qū)搬遷法 dos系統(tǒng)中存在著許多間隙,有

12、的空隙還相當(dāng)大,這些間隙為駐留程序提供了很大方便。可以將需要駐留的程序直接搬遷到該空閑區(qū)中,即可實(shí)現(xiàn)駐留,它既在dos的正常管理之下,又不破壞dos。此種間隙有很多,如:以rom bios通訊區(qū)為例,其占用內(nèi)存的40:00處,總共有256個(gè)字節(jié),但是實(shí)際上ibm pc /xt僅使用到40:82h單元,最后122個(gè)字節(jié)未被使用,此種間隙中最大而又最完整的位于.50:00一50: 1 ff,這塊內(nèi)容,在分析中發(fā)現(xiàn)dos系統(tǒng)只在該區(qū)建立了一個(gè)軟盤基數(shù)表(ifh),除此之外,添人任何值,都不構(gòu)成對(duì)dos系統(tǒng)正常運(yùn)行的威脅.但此種方法有一個(gè)缺陷,就是它只適用于小的駐留程序使用,且較易引發(fā)病毒.因此,從這

13、種角度來看它不是一種優(yōu)秀的方法.2.2.3高端地址搬遷法dos系統(tǒng)在004 :0013h處有一兩字節(jié)的變量表示系統(tǒng)有多少可用的內(nèi)存分配空間。可選用適當(dāng)?shù)姆椒▽?0 : 13字中的內(nèi)容加以修改,從而減少dos系統(tǒng)可分配空間,為駐留程序開辟一個(gè)足夠大的空間.利用這種方法開辟的空間均在內(nèi)存高端再通過一定的算法將內(nèi)存高端地址算出,然后將需駐留部分搬遷到此處即可。計(jì)算內(nèi)存高端地址的算法為:高端地址=(0413)一駐留程序大小)x6一07coh2.3駐留程序的撤消 有許多tsr程序都沒有釋放的功能,這對(duì)于一些占用內(nèi)存較多的asr程序來說,會(huì)給用戶帶來很多不便,因此,對(duì)于一個(gè)駐留程序來說,在發(fā)揮其作用之后最

14、好采用一定手段將其釋放.對(duì)于駐留程序的釋放,可以采用三種方法:2.3.1利用dos的int49h功能調(diào)用來進(jìn)行釋放該種方法主要是用來釋放那些通過對(duì)內(nèi)存塊操作而被駐留的程序,如上述收尋內(nèi)存控制塊法。具體做法是:在程序駐留時(shí),首先要設(shè)置駐留標(biāo)志,并保存原內(nèi)存塊大小,在釋放時(shí),就可通過收尋該標(biāo)志的方法找到被駐留程序所在的內(nèi)存塊,再算出其所在內(nèi)存塊的起始地址,并根據(jù)內(nèi)存塊的大小采用int49h加以釋放。2.3.2修改內(nèi)存控制塊標(biāo)志的釋放方法這種方法是在駐留時(shí)首先將原內(nèi)存塊的一大小保存起來,并設(shè)置駐留標(biāo)志。在釋放時(shí),根據(jù)駐留標(biāo)志,尋找符合條件的塊。找到之后,將該塊的mcb的第01和02位送人0值,即將該

15、塊標(biāo)志成空閑塊,并將保存的原內(nèi)存塊的大小重新賦給mcb的第03和04位,這樣當(dāng)再有程序加載內(nèi)存時(shí),此駐留程序就完全可以覆蓋掉,進(jìn)而實(shí)現(xiàn)了駐留程序的釋放。2.3.3合并內(nèi)存塊法釋放駐留程序系統(tǒng)加載執(zhí)行一個(gè)程序時(shí)dus至少給程序分配兩個(gè)內(nèi)存塊,一個(gè)是包含環(huán)境的內(nèi)存塊,另一個(gè)是以psp開頭的內(nèi)存塊,包含有程序本身所有的代碼和數(shù)據(jù).而此種方法主要是通過對(duì)駐留程序的環(huán)境塊和本身所在的內(nèi)存塊進(jìn)行操作來實(shí)現(xiàn)的,即:在實(shí)現(xiàn)駐留時(shí),首先保存當(dāng)前程序的psp段,然后根據(jù)psp中2ch字節(jié)處的值獲得程序的環(huán)境塊的段值,再根據(jù)內(nèi)存控制塊中相應(yīng)位的值將兩個(gè)內(nèi)存塊的大小分別保存起來,在進(jìn)行釋放時(shí),首先從相應(yīng)變量中取出ps

16、p的段值,再根據(jù)psp中zch處的值獲得駐留程序的環(huán)境塊的段值,之后將環(huán)境塊的內(nèi)存控制塊的第。位標(biāo)志修改成“z即最后一塊),再?gòu)南鄳?yīng)變量中取出保存的環(huán)境塊大小和程序所在內(nèi)存塊的大小,將它們的和加1再賦給本環(huán)境塊中內(nèi)存控制塊的第03位和04位,從而構(gòu)成一個(gè)大的內(nèi)存塊,這樣當(dāng)再有程序加載內(nèi)存時(shí)就完全可以把駐留程序覆蓋掉,駐留程序部分也就被釋放。2.4避免重復(fù)駐留tsr程序與一般程序不同,一般程序加載到內(nèi)存,程序結(jié)束后,就會(huì)釋放所占用的內(nèi)存而tsr程序在結(jié)束之后,并不將內(nèi)存釋放,而是繼續(xù)占用,如果多次重復(fù)駐留的話,就會(huì)使內(nèi)存空間越來越小,甚至?xí)茐恼麄€(gè)系統(tǒng)的運(yùn)行,因此有必要避免重復(fù)駐留.現(xiàn)有的避免重

17、復(fù)駐留的方法有很多,如:內(nèi)存搜索法,中斷查詢法等而這里采用的是一種在內(nèi)存中某一空閑區(qū)的特定位上設(shè)置標(biāo)志的方法,也就是在執(zhí)行駐留程序時(shí),先判斷該空間中有無某特定的駐留標(biāo)志有則返回dos,沒有則在該空閑區(qū)設(shè)定其標(biāo)志并駐留。2.5駐留程序的激活 所有tsr程序都有其激活條件一般來說激活祖序的方法有很多,如:截時(shí)鐘中斷,熱鍵等.這里采用的是一種組合鍵的方式,其主要方法是:先截取鍵盤中斷09h,之后在新的09h中斷中,先調(diào)用原09h中斷,接著再調(diào)用鍵盤中斷16h,利用返回值中的掃描碼或asc:ii碼來設(shè)置條件并判斷是否滿足要求。3 駐留程序的調(diào)試和激活下面我用匯編語(yǔ)言編寫了一個(gè)tsr程序,其功能為如無鍵

18、盤工作則定時(shí)關(guān)閉屏幕顯示功能,而一旦有任意鍵按下則恢復(fù)顯示。在dos環(huán)境下運(yùn)行這個(gè)程序可達(dá)到屏幕保護(hù)的功能。以下通過這個(gè)程序?qū)嵗榻Btsr程序的結(jié)構(gòu)及設(shè)計(jì)。3.1 tsr程序中的引導(dǎo)部分這個(gè)tsr程序的主體部分由兩部分組成:一部分是引導(dǎo)子過程save,它引導(dǎo)另一部分程序的駐留.為了使某程序段駐留內(nèi)存并有一個(gè)運(yùn)行的切入口,它要在中斷向量表中以新中斷服務(wù)程序入口地址替代原中斷服務(wù)程序的入口地址。save: 子過程程序如下:save proc farmov ax,3509hint 21hlea dx,new09cmp dx,bxjz no-staymov word ptr oldint09,bxmo

19、v word ptr oldint09+2,esmov ax,351chint 21hmov word ptr oldintlc,bxmov word ptr oldint1c+2,esmov ax,csmov ds,axmov ax,2509hlea dx,new09int 21hmov ax,251chlea dx,new1cint 21hlea dx,msg1mov ah,09hint 21hlea dx,saveadd dx,0fhmov c1,04hshr dx,c1inc dxmov ax,3100hint 21hno-stay:lea dx,msg2mov ah,9int 21h

20、mov ah,4chint 21hsave endp 為了使tsr程序中的駐留代碼駐留內(nèi)存,該引導(dǎo)程序調(diào)用31h功能號(hào)將駐留部分占用內(nèi)存空間的大小通知給dos,dos依此給駐留部分開辟一片內(nèi)存空間,隨即釋放引導(dǎo)部分所占用的存儲(chǔ)空間,這時(shí)引導(dǎo)部分就完成了自己的歷史使命。這就是tsr程序的駐留過程.引導(dǎo)駐留主要有兩種方式: 調(diào)用dos中斷的31h號(hào)功能。該功能是結(jié)束進(jìn)程并將常駐部分駐留內(nèi)存,駐留部分的大小由dx寄存器所指示。本文程序在調(diào)用31h功能號(hào)之前,計(jì)算駐留代碼的存儲(chǔ)空間大小,并以節(jié)(1節(jié)為16字節(jié))為長(zhǎng)度單位送入dx寄存器.從dx寄存器的數(shù)據(jù)表示范圍來看駐留程序的規(guī)模最大可達(dá)到16216字

21、節(jié)長(zhǎng),足以滿足無論是.com格式或.exe格式的tsr文件駐留. 調(diào)用int 27h中斷。int 27h的功能也是結(jié)束進(jìn)程且將常駐部分駐留內(nèi)存,但調(diào)用時(shí)dx寄存器中的駐留長(zhǎng)度表示單位為字節(jié),顯然,它限制了可駐留程序的最大規(guī)模為216即64k字節(jié),即不超過一個(gè)段的長(zhǎng)度。3.2 tsr程序中的駐留部分這個(gè)tsr程序的另一部分是new09和new10子過程,它們是被駐留程序段,具體完成定時(shí)關(guān)閉屏幕功能和鍵盤開啟屏幕功能。它們截取了原鍵盤中斷服務(wù)程序和原定時(shí)計(jì)數(shù)中斷服務(wù)程序的入口,將其新功能段各自嵌入到原中斷服務(wù)程序的頭部,即執(zhí)行了新增功能段后仍然轉(zhuǎn)向原中斷服務(wù)程序。這一部分代碼常駐內(nèi)存,所謂內(nèi)存駐留

22、程序tsr指的就是這一段代碼。new09和new10子過程如下:new09 proc farstipush axpush bxcmp cs:flag,0je old09mov bl,36hmov ax, 1200hint 10hmov cs:flag,0old09: mov cs:count,0pop bxpop axjmp cs:oldint09new09 endpnew1c proc farsti push ax push bx inc cs:count mov ax,cs:time cmp ax,cs:count jne old1c mov bl,36h mov ax,1201h int

23、 10h mov cs:count,0 mov cs:flag,0fh old1c: pop bx pop ax jmp cs:oldint1c new1c endp以上兩個(gè)部分是程序的主體部分.tsr程序的框架如下: code segmentassume cs:code,ds:code,es:codeorg 100hgo: jmp savetime dw 500 ;該數(shù)據(jù)可調(diào)整以控制等待時(shí)間count dw 00flag db 00oldint09 dd ?oldint1c dd ?.msg1 db 0ah,0dh,close crt residented! ,0ah,0dh,msg2 db

24、 07h,0ah,0dh,bye! ,0ah,0dh,code endsend go3.3 tsr的激活機(jī)制與方式由于dos是一個(gè)單任務(wù)操作系統(tǒng),沒有進(jìn)程調(diào)度能力,因此潛伏在后臺(tái)的tsr程序只有掛靠在某類中斷上才能得到激活。本程序中的new09段掛靠在09號(hào)中斷上,new10段掛靠在10h號(hào)中斷上。為了激活tsr程序,在tsr程序初始化時(shí),調(diào)用25h功能號(hào)修改中斷向量,“偷梁換柱”地把駐留模塊入口掛靠在某中斷上.若駐留模塊還需完整地使用原中斷模塊功能,就應(yīng)調(diào)用35h功能號(hào)將原模塊入口地址保存在約定的內(nèi)存單元中,以便在需要的時(shí)候轉(zhuǎn)移到原模塊。值得指出的是至于原中斷服務(wù)模塊的入口地址是否要保留,這

25、要視具體情況而定,如果原中斷服務(wù)模塊完全棄之不用,則不必保留原模塊入口地址.激活tsr有如下幾種方式: 可沿襲某些原中斷服務(wù)模塊所具備的硬件中斷“彈出”方式(如本文程序); 可以由外部事件啟動(dòng),通常是定義熱鍵,如定義某特定鍵或組合鍵以激活tsr程序; 修改某類中斷服務(wù)程序,嵌入對(duì)內(nèi)部事件的“監(jiān)控”功能程序段,一旦被監(jiān)控的事件發(fā)生,則激活tsr程序作相應(yīng)的處理。3.4 防止tsr程序的重復(fù)駐留若不采取相應(yīng)措施,tsr程序會(huì)每運(yùn)行一次就駐留內(nèi)存一次,這不僅沒有必要,更會(huì)大量耗費(fèi)內(nèi)存及??臻g的資源,中斷鏈的加長(zhǎng)也會(huì)降低運(yùn)行速度。本程序采用的措施是比較當(dāng)前中斷向量與tsr中斷服務(wù)程序入口,若相同則表明

26、tsr程序已駐留,不再重復(fù)駐留.一般情況下,這是一個(gè)非常簡(jiǎn)單實(shí)用的方法。但這種方法不適用于多個(gè)不同的tsr程序依次駐留且又都修改了同一類中斷向量的情況,因?yàn)樵龠\(yùn)行首次駐留的tsr程序,仍會(huì)由于比較結(jié)果的相異而發(fā)生重復(fù)駐留。全面的判斷可使用dos調(diào)用中的52h功能號(hào)取系統(tǒng)參數(shù)表,沿內(nèi)存塊鏈逐個(gè)檢查是否具備該tsr程序的特征標(biāo)志,若查到則不再重復(fù)駐留。3.5 tsr程序的調(diào)試tsr程序的調(diào)試有別于普通程序,因?yàn)閠sr程序的兩部分即引導(dǎo)部分和駐留部分均要被調(diào)試,而當(dāng)它運(yùn)行時(shí)僅僅執(zhí)行的是引導(dǎo)部分的功能,這部分程序完成了引導(dǎo)駐留之后就結(jié)束了進(jìn)程,因此,無法調(diào)試駐留部分.在這里介紹駐留部分的調(diào)試方法.首先推薦調(diào)試工具軟件turbo debugger,這是一個(gè)集成環(huán)境的源級(jí)調(diào)試器,它可以象調(diào)試一般的可執(zhí)行文件那樣調(diào)試駐留程序.利用turbo debugger調(diào)試駐留程序的步驟如下: 以tasm工具匯編tsr程序的.asm源程序文件,使用/zi參數(shù)指明加入符號(hào)調(diào)試; 以tlink工具連接tsr程序的.obj文件,用/v參數(shù)指明包含調(diào)試信息; 若是以.com格式編寫的tsr程序,則以exe2bin工具軟件將tsr程序的.exe文件轉(zhuǎn)換成.com

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論