版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、駐留程序設(shè)計1.前言11.1駐留程序的特點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è)計要點135 參 考 文 獻(xiàn)141.前言計算機(jī)軟件操作系統(tǒng)應(yīng)提供多任務(wù)環(huán)境,這對于當(dāng)今的操作系統(tǒng)來說,幾乎是不言而喻的,炙手可熱的windows操作系統(tǒng)就是多進(jìn)程環(huán)境的典范.但在dos操作系統(tǒng)與windows操作系統(tǒng)并行不悖的今天,從運行速度、功能的靈活性考慮,仍有一些場合需要設(shè)計短小精悍且實用性強(qiáng)的dos后臺應(yīng)用程序。駐留程序(tsr)就是這樣一種應(yīng)用程序。tsr(terminate and stay resident)意為結(jié)束進(jìn)程并駐留,它不同于結(jié)束即退出的一般dos應(yīng)用程序,而是把自身的一部分程序代碼裝入內(nèi)存后將控制返回給dos,這段程序代碼一直潛伏
3、在“后臺”工作,所占存儲空間受到dos保護(hù)而不會被其它程序覆蓋.一旦激活tsr程序的條件滿足(如執(zhí)行了相應(yīng)的熱鍵操作),tsr將立即提供自身的服務(wù)功能.由此可見,tsr程序能夠與前臺程序并行工作且及時地處理一些事件,為單任務(wù)的dos操作系統(tǒng)增添了多任務(wù)處理能力,優(yōu)化了計算機(jī)環(huán)境,它是實用程序中最重要的一種類型,也是一種特殊的編程技術(shù)。駐留程序是一種重要的實用程序類型.掌握這種技術(shù)可以使程序員在單任務(wù)操作系統(tǒng)環(huán)境下,編寫多任務(wù)程序。駐留程序具有很強(qiáng)的后臺性能,與一般的程序不同,駐留程序一旦裝載就一直存在且可以隨時被激活調(diào)用。 駐留程序通過接管中斷而工作,它們?nèi)〈袛喟l(fā)生時調(diào)用的子程序,修改中斷或
4、接管多個中斷,以改變中斷操作方式。駐留程序能發(fā)揮很大的作用,但同時也帶來了許多的編程難點.編程不當(dāng)會導(dǎo)致嚴(yán)重后果:堆棧溢出,屏幕混亂等.伴隨著駐留程序的產(chǎn)生同時出現(xiàn)了一些與駐留有關(guān)的問題,如:駐留程序的釋放,避免重復(fù)駐留等.妥善地處理好此類問題對于編寫成功的駐留程序也是很重要的。1.1駐留程序的特點內(nèi)存駐留程序是經(jīng)運行后有一部分代碼仍駐留在內(nèi)存中的程序,它一般接管中斷,即把用戶自己編寫的子程序替換或部分替換原有的中斷服務(wù)子程序,同時修改中斷向量使之指向用戶編寫的子程序。用戶編寫的子程序替換原有的中斷服務(wù)程序后常駐內(nèi)存,并可以在任何時候被激活。1.2駐留程序的結(jié)構(gòu)內(nèi)存駐留程序一般設(shè)計成com文件
5、類型,從而它只有一個段,其基本結(jié)如下:跳轉(zhuǎn)指令駐留部分非駐留部分由于非駐留部分位于程序的尾部,從程序的org 100h處安排一條跳轉(zhuǎn)指令跳轉(zhuǎn)到該部分.駐留部分包括駐留數(shù)據(jù)部分和駐留程序部分,駐留數(shù)據(jù)部分用于保存中間數(shù)據(jù)和原中斷向量,駐留程序部分是用戶設(shè)計的一個中斷服務(wù)子程序,駐留程序部分應(yīng)按下述原則設(shè)計:(1)它是一個far型的過程.(2) 若該程序還要調(diào)用原來的中斷服務(wù)子程序,則用call指令調(diào)用,且調(diào)用之前一定要加一條pushf指令,與中斷服務(wù)子程序的中斷返回指令iret相呼應(yīng)。(3)用戶編寫的中斷服務(wù)子程序必須以iret指令返回.非駐留部分不在內(nèi)存中駐留,其主要功能是保證駐留部分被裝載,
6、它又分為檢查。接管中斷、駐留退出等三部分.檢查部分的功能是檢查是否已安裝了內(nèi)存駐留程序,一個內(nèi)存駐留程序不應(yīng)多次安裝,因為每次安裝,將會占用更多的內(nèi)存。因此安裝成功后,應(yīng)設(shè)置某一標(biāo)記,再次啟動內(nèi)存駐留程序時,就應(yīng)檢查該標(biāo)記,如發(fā)現(xiàn)已經(jīng)安裝,則顯示已安裝提示信息,同時終止安裝.一般借助于未用中斷60h至67h中的某一個來設(shè)置標(biāo)記.安裝部分主要實現(xiàn)保存原中斷向量,并把中斷向量指向用戶編寫的駐留子程序.一般分別采用功能號為35h和25h的dos調(diào)用實現(xiàn).退出駐留部分的功能是終止程序的執(zhí)行并駐留,在寄存器dx中設(shè)置合適的駐留長度,并調(diào)用功能號為31h的dos調(diào)用。2. 駐留程序常用的駐留方法就現(xiàn)有的駐
7、留方法來說,可以分為中斷駐留法和代碼轉(zhuǎn)移方法,即搬遷法。2.1中斷駐留法2.1.1常駐程序基本結(jié)構(gòu)(1) .com文件 常駐程序必須是.con,文件,程序只能加載在一個段內(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)重錯誤處理程序。內(nèi)存常駐程序與.com程序相比多了一部分,即第三部分,這部分使start和inin,之間的程序駐留在內(nèi)存中。b使用int21 h系統(tǒng)調(diào)用功能號31h,使程序駐留結(jié)束。入口參數(shù):ah=31h al=返回代碼dx=保留內(nèi)存大小(1節(jié)數(shù)“16字節(jié))該中斷普遍用于駐留驅(qū)動程序或子程序,它在dos命令級被調(diào)用一次后,隨后以軟中斷方式提供服務(wù).在調(diào)用前,應(yīng)分配內(nèi)存塊的長度,程序裝人時,它僅僅處理內(nèi)存分配,該功
9、能優(yōu)先于int27h調(diào)用,因為它允許傳送回一返回碼,并有可駐留大于60k字節(jié)的程序。目前中斷駐留法比較常用。2.2搬遷駐留法所謂搬遷法就是采取一定的方法,以獲得內(nèi)存中某一空閑區(qū)的起始地址及大小,之后再將需駐留的程序部分直接搬遷到該地址的空間里,同時采用某種手段使其不被其他再次裝載的程序覆蓋.用中斷駐留法,使用者無需關(guān)心駐留程序所駐留的具體地址,也不必?fù)?dān)心駐留部分會破壞系統(tǒng)。而使用搬遷法駐留,稍不注意就會導(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個字節(jié),其具體內(nèi)容見表1。 內(nèi)存分配塊maii:程序段前綴psp(100h字節(jié)),內(nèi)存裝載程序部分。表1 (2)int21h的52h一號保留中斷功能in721h的52h號中斷功能調(diào)用主要是確定內(nèi)存塊主鏈中第一個內(nèi)存控制塊mcb的具體地址,根據(jù)第一個mcb的地址利用公式可計算出下一個mcb的具體地址,其調(diào)用格式如下: mov ah, 52h int 211r該操作的返回值為:e:s: (13x一2指向第一個mci段地址,其偏移地址值為口.下一個mcb的具體地址的計算公式是:下一個內(nèi)存控制塊mcl3段地址二本內(nèi)存
11、控制塊地址+本內(nèi)存分配塊mab大小+1(3)此種駐留方法的具體原理如下: 通過int21 h一號的52h號子功能調(diào)用確定第一個mcb段地址,然后根據(jù)第一個mcb段地址分別計算出其他mcb段地址,在獲得其他mcb段地址的過程中,分別查看該mcb的第o1和02位的值是否為0,為0則表示該內(nèi)存塊為空閑塊,即可將需駐留部分直接移到該空閑塊中,實現(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)大,這些間隙為駐留程序提供了很大方便??梢詫⑿枰v留的程序直接搬遷到該空閑區(qū)中,即可實現(xiàn)駐留,它既在dos的正常管理之下,又不破壞dos。此種間隙有很多,如:以rom bios通訊區(qū)為例,其占用內(nèi)存的40:00處,總共有256個字節(jié),但是實際上ibm pc /xt僅使用到40:82h單元,最后122個字節(jié)未被使用,此種間隙中最大而又最完整的位于.50:00一50: 1 ff,這塊內(nèi)容,在分析中發(fā)現(xiàn)dos系統(tǒng)只在該區(qū)建立了一個軟盤基數(shù)表(ifh),除此之外,添人任何值,都不構(gòu)成對dos系統(tǒng)正常運行的威脅.但此種方法有一個缺陷,就是它只適用于小的駐留程序使用,且較易引發(fā)病毒.因此,從這
13、種角度來看它不是一種優(yōu)秀的方法.2.2.3高端地址搬遷法dos系統(tǒng)在004 :0013h處有一兩字節(jié)的變量表示系統(tǒng)有多少可用的內(nèi)存分配空間??蛇x用適當(dāng)?shù)姆椒▽?0 : 13字中的內(nèi)容加以修改,從而減少dos系統(tǒng)可分配空間,為駐留程序開辟一個足夠大的空間.利用這種方法開辟的空間均在內(nèi)存高端再通過一定的算法將內(nèi)存高端地址算出,然后將需駐留部分搬遷到此處即可。計算內(nèi)存高端地址的算法為:高端地址=(0413)一駐留程序大小)x6一07coh2.3駐留程序的撤消 有許多tsr程序都沒有釋放的功能,這對于一些占用內(nèi)存較多的asr程序來說,會給用戶帶來很多不便,因此,對于一個駐留程序來說,在發(fā)揮其作用之后最
14、好采用一定手段將其釋放.對于駐留程序的釋放,可以采用三種方法:2.3.1利用dos的int49h功能調(diào)用來進(jìn)行釋放該種方法主要是用來釋放那些通過對內(nèi)存塊操作而被駐留的程序,如上述收尋內(nèi)存控制塊法。具體做法是:在程序駐留時,首先要設(shè)置駐留標(biāo)志,并保存原內(nèi)存塊大小,在釋放時,就可通過收尋該標(biāo)志的方法找到被駐留程序所在的內(nèi)存塊,再算出其所在內(nèi)存塊的起始地址,并根據(jù)內(nèi)存塊的大小采用int49h加以釋放。2.3.2修改內(nèi)存控制塊標(biāo)志的釋放方法這種方法是在駐留時首先將原內(nèi)存塊的一大小保存起來,并設(shè)置駐留標(biāo)志。在釋放時,根據(jù)駐留標(biāo)志,尋找符合條件的塊。找到之后,將該塊的mcb的第01和02位送人0值,即將該
15、塊標(biāo)志成空閑塊,并將保存的原內(nèi)存塊的大小重新賦給mcb的第03和04位,這樣當(dāng)再有程序加載內(nèi)存時,此駐留程序就完全可以覆蓋掉,進(jìn)而實現(xiàn)了駐留程序的釋放。2.3.3合并內(nèi)存塊法釋放駐留程序系統(tǒng)加載執(zhí)行一個程序時dus至少給程序分配兩個內(nèi)存塊,一個是包含環(huán)境的內(nèi)存塊,另一個是以psp開頭的內(nèi)存塊,包含有程序本身所有的代碼和數(shù)據(jù).而此種方法主要是通過對駐留程序的環(huán)境塊和本身所在的內(nèi)存塊進(jìn)行操作來實現(xiàn)的,即:在實現(xiàn)駐留時,首先保存當(dāng)前程序的psp段,然后根據(jù)psp中2ch字節(jié)處的值獲得程序的環(huán)境塊的段值,再根據(jù)內(nèi)存控制塊中相應(yīng)位的值將兩個內(nèi)存塊的大小分別保存起來,在進(jìn)行釋放時,首先從相應(yīng)變量中取出ps
16、p的段值,再根據(jù)psp中zch處的值獲得駐留程序的環(huán)境塊的段值,之后將環(huán)境塊的內(nèi)存控制塊的第。位標(biāo)志修改成“z即最后一塊),再從相應(yīng)變量中取出保存的環(huán)境塊大小和程序所在內(nèi)存塊的大小,將它們的和加1再賦給本環(huán)境塊中內(nèi)存控制塊的第03位和04位,從而構(gòu)成一個大的內(nèi)存塊,這樣當(dāng)再有程序加載內(nèi)存時就完全可以把駐留程序覆蓋掉,駐留程序部分也就被釋放。2.4避免重復(fù)駐留tsr程序與一般程序不同,一般程序加載到內(nèi)存,程序結(jié)束后,就會釋放所占用的內(nèi)存而tsr程序在結(jié)束之后,并不將內(nèi)存釋放,而是繼續(xù)占用,如果多次重復(fù)駐留的話,就會使內(nèi)存空間越來越小,甚至?xí)茐恼麄€系統(tǒng)的運行,因此有必要避免重復(fù)駐留.現(xiàn)有的避免重
17、復(fù)駐留的方法有很多,如:內(nèi)存搜索法,中斷查詢法等而這里采用的是一種在內(nèi)存中某一空閑區(qū)的特定位上設(shè)置標(biāo)志的方法,也就是在執(zhí)行駐留程序時,先判斷該空間中有無某特定的駐留標(biāo)志有則返回dos,沒有則在該空閑區(qū)設(shè)定其標(biāo)志并駐留。2.5駐留程序的激活 所有tsr程序都有其激活條件一般來說激活祖序的方法有很多,如:截時鐘中斷,熱鍵等.這里采用的是一種組合鍵的方式,其主要方法是:先截取鍵盤中斷09h,之后在新的09h中斷中,先調(diào)用原09h中斷,接著再調(diào)用鍵盤中斷16h,利用返回值中的掃描碼或asc:ii碼來設(shè)置條件并判斷是否滿足要求。3 駐留程序的調(diào)試和激活下面我用匯編語言編寫了一個tsr程序,其功能為如無鍵
18、盤工作則定時關(guān)閉屏幕顯示功能,而一旦有任意鍵按下則恢復(fù)顯示。在dos環(huán)境下運行這個程序可達(dá)到屏幕保護(hù)的功能。以下通過這個程序?qū)嵗榻Btsr程序的結(jié)構(gòu)及設(shè)計。3.1 tsr程序中的引導(dǎo)部分這個tsr程序的主體部分由兩部分組成:一部分是引導(dǎo)子過程save,它引導(dǎo)另一部分程序的駐留.為了使某程序段駐留內(nèi)存并有一個運行的切入口,它要在中斷向量表中以新中斷服務(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功能號將駐留部分占用內(nèi)存空間的大小通知給dos,dos依此給駐留部分開辟一片內(nèi)存空間,隨即釋放引導(dǎo)部分所占用的存儲空間,這時引導(dǎo)部分就完成了自己的歷史使命。這就是tsr程序的駐留過程.引導(dǎo)駐留主要有兩種方式: 調(diào)用dos中斷的31h號功能。該功能是結(jié)束進(jìn)程并將常駐部分駐留內(nèi)存,駐留部分的大小由dx寄存器所指示。本文程序在調(diào)用31h功能號之前,計算駐留代碼的存儲空間大小,并以節(jié)(1節(jié)為16字節(jié))為長度單位送入dx寄存器.從dx寄存器的數(shù)據(jù)表示范圍來看駐留程序的規(guī)模最大可達(dá)到16216字
21、節(jié)長,足以滿足無論是.com格式或.exe格式的tsr文件駐留. 調(diào)用int 27h中斷。int 27h的功能也是結(jié)束進(jìn)程且將常駐部分駐留內(nèi)存,但調(diào)用時dx寄存器中的駐留長度表示單位為字節(jié),顯然,它限制了可駐留程序的最大規(guī)模為216即64k字節(jié),即不超過一個段的長度。3.2 tsr程序中的駐留部分這個tsr程序的另一部分是new09和new10子過程,它們是被駐留程序段,具體完成定時關(guān)閉屏幕功能和鍵盤開啟屏幕功能。它們截取了原鍵盤中斷服務(wù)程序和原定時計數(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以上兩個部分是程序的主體部分.tsr程序的框架如下: code segmentassume cs:code,ds:code,es:codeorg 100hgo: jmp savetime dw 500 ;該數(shù)據(jù)可調(diào)整以控制等待時間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是一個單任務(wù)操作系統(tǒng),沒有進(jìn)程調(diào)度能力,因此潛伏在后臺的tsr程序只有掛靠在某類中斷上才能得到激活。本程序中的new09段掛靠在09號中斷上,new10段掛靠在10h號中斷上。為了激活tsr程序,在tsr程序初始化時,調(diào)用25h功能號修改中斷向量,“偷梁換柱”地把駐留模塊入口掛靠在某中斷上.若駐留模塊還需完整地使用原中斷模塊功能,就應(yīng)調(diào)用35h功能號將原模塊入口地址保存在約定的內(nèi)存單元中,以便在需要的時候轉(zhuǎn)移到原模塊。值得指出的是至于原中斷服務(wù)模塊的入口地址是否要保留,這
25、要視具體情況而定,如果原中斷服務(wù)模塊完全棄之不用,則不必保留原模塊入口地址.激活tsr有如下幾種方式: 可沿襲某些原中斷服務(wù)模塊所具備的硬件中斷“彈出”方式(如本文程序); 可以由外部事件啟動,通常是定義熱鍵,如定義某特定鍵或組合鍵以激活tsr程序; 修改某類中斷服務(wù)程序,嵌入對內(nèi)部事件的“監(jiān)控”功能程序段,一旦被監(jiān)控的事件發(fā)生,則激活tsr程序作相應(yīng)的處理。3.4 防止tsr程序的重復(fù)駐留若不采取相應(yīng)措施,tsr程序會每運行一次就駐留內(nèi)存一次,這不僅沒有必要,更會大量耗費內(nèi)存及??臻g的資源,中斷鏈的加長也會降低運行速度。本程序采用的措施是比較當(dāng)前中斷向量與tsr中斷服務(wù)程序入口,若相同則表明
26、tsr程序已駐留,不再重復(fù)駐留.一般情況下,這是一個非常簡單實用的方法。但這種方法不適用于多個不同的tsr程序依次駐留且又都修改了同一類中斷向量的情況,因為再運行首次駐留的tsr程序,仍會由于比較結(jié)果的相異而發(fā)生重復(fù)駐留。全面的判斷可使用dos調(diào)用中的52h功能號取系統(tǒng)參數(shù)表,沿內(nèi)存塊鏈逐個檢查是否具備該tsr程序的特征標(biāo)志,若查到則不再重復(fù)駐留。3.5 tsr程序的調(diào)試tsr程序的調(diào)試有別于普通程序,因為tsr程序的兩部分即引導(dǎo)部分和駐留部分均要被調(diào)試,而當(dāng)它運行時僅僅執(zhí)行的是引導(dǎo)部分的功能,這部分程序完成了引導(dǎo)駐留之后就結(jié)束了進(jìn)程,因此,無法調(diào)試駐留部分.在這里介紹駐留部分的調(diào)試方法.首先推薦調(diào)試工具軟件turbo debugger,這是一個集成環(huán)境的源級調(diào)試器,它可以象調(diào)試一般的可執(zhí)行文件那樣調(diào)試駐留程序.利用turbo debugger調(diào)試駐留程序的步驟如下: 以tasm工具匯編tsr程序的.asm源程序文件,使用/zi參數(shù)指明加入符號調(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年電商公司員工培訓(xùn)與保密責(zé)任協(xié)議4篇
- 二零二五年度車輛抵押擔(dān)保車輛回購合同模板4篇
- 專業(yè)化妝師合作協(xié)議(2024年修訂)
- 2025年度環(huán)保節(jié)能設(shè)備產(chǎn)品授權(quán)銷售代理合同4篇
- 二零二五年度草原生態(tài)旅游開發(fā)與生態(tài)環(huán)境保護(hù)合同3篇
- 2025年度創(chuàng)業(yè)園區(qū)入駐企業(yè)孵化合作協(xié)議3篇
- 二零二五年度國際人才引進(jìn)與培養(yǎng)合作協(xié)議
- 二零二五年度車輛質(zhì)押典當(dāng)風(fēng)險評估與控制合同4篇
- 2025年中國花蕊保濕玫瑰水市場調(diào)查研究報告
- 核能產(chǎn)業(yè)技術(shù)創(chuàng)新-深度研究
- 《社區(qū)康復(fù)》課件-第五章 脊髓損傷患者的社區(qū)康復(fù)實踐
- 繪本《圖書館獅子》原文
- 安全使用公共WiFi網(wǎng)絡(luò)的方法
- 2023年管理學(xué)原理考試題庫附答案
- 【可行性報告】2023年電動自行車相關(guān)項目可行性研究報告
- 歐洲食品與飲料行業(yè)數(shù)據(jù)與趨勢
- 放療科室規(guī)章制度(二篇)
- 中高職貫通培養(yǎng)三二分段(中職階段)新能源汽車檢測與維修專業(yè)課程體系
- 浙江省安全員C證考試題庫及答案(推薦)
- 目視講義.的知識
- 房地產(chǎn)公司流動資產(chǎn)管理制度
評論
0/150
提交評論