版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Linux操作系統(tǒng)內(nèi)核分析湘潭大學(xué)信息工程學(xué)院講課內(nèi)容bootsect.s程序分析setup.s程序分析head.s程序分析 要求大家知道每個(gè)程序的作用!操作系統(tǒng)引導(dǎo)應(yīng)用程序操作系統(tǒng)引導(dǎo)程序BIOS裝載裝載裝載??磁盤結(jié)構(gòu)磁道:不同半徑的同心圓稱為磁道扇區(qū):512B磁頭:每個(gè)磁盤有兩個(gè)面,每個(gè)面都有一個(gè)磁頭使用磁頭號(hào)、柱面號(hào)、扇區(qū)號(hào)可唯一確定一個(gè)扇區(qū)引導(dǎo)扇區(qū)引導(dǎo)扇區(qū)是磁盤的第一個(gè)扇區(qū)(0磁頭0磁道1扇區(qū))。引導(dǎo)扇區(qū)中的程序是負(fù)責(zé)裝載操作系統(tǒng)的程序,被成為自舉程序或引導(dǎo)程序(bootstrap)。限制:自舉程序的大小為512B,且最后兩個(gè)字節(jié)必須為0xaa55。開機(jī)過(guò)程開機(jī)BIOS完成加電自檢將引導(dǎo)盤的引導(dǎo)扇區(qū)讀入到內(nèi)存0x7c00處檢查0x7c00+510開始的兩個(gè)字節(jié)是否是0xaa55跳到0x7c00執(zhí)行實(shí)模式內(nèi)存尋址段內(nèi)偏移0154段地址015+019段地址015物理地址邏輯地址基地址64K1M段地址:段內(nèi)偏移bootsect程序bootsect程序就是一個(gè)自舉程序,負(fù)責(zé)把Linux操作系統(tǒng)內(nèi)核從存儲(chǔ)設(shè)備裝入內(nèi)存。用匯編語(yǔ)言編寫,遵循Intel匯編語(yǔ)法裝載過(guò)程0x0000000x007c000x0100000x0900000x0902000x100000setupbootsectsystem移動(dòng)自己movw指令:從ds:si移動(dòng)一個(gè)字到es:di,然后根據(jù)標(biāo)志寄存器中direct標(biāo)志位,把si和di分別加2(d=0)或減2(d=1)。rep:重復(fù)執(zhí)行后面的命令,重復(fù)次數(shù)放在cx寄存器中,每執(zhí)行一次后面的命令則把cx中的值減1,直到cx為0。移動(dòng)自己ds=0x7c0;es=0x9000;si=0;di=0;While(cx>0){ 從ds:si移動(dòng)一個(gè)字到es:di;if(d==0){si+=2;di+=2;} else{si-=2;di-=2;};cx--;}裝載中斷0x13中斷,2號(hào)功能類似于函數(shù):intload(磁頭號(hào),磁道號(hào),扇區(qū)號(hào),要讀扇區(qū)數(shù)量,讀入內(nèi)存地址)裝載setup磁頭號(hào):0磁頭磁道號(hào):0磁道開始扇區(qū)號(hào):2(?)要讀扇區(qū)數(shù)量:4讀入內(nèi)存地址:0:0x90200裝載System限制13中斷一次只能讀同一磁道上的扇區(qū)實(shí)模式下內(nèi)存段大小不能超過(guò)64K解決方法一次讀一個(gè)扇區(qū),讀完后如果內(nèi)存段滿了則調(diào)整到下一個(gè)內(nèi)存段。太慢!在讀之前取磁道上剩余扇區(qū)大小和內(nèi)存段剩余大小中的最小值M,讀M/512個(gè)扇區(qū)。裝載System磁盤讀取規(guī)則:當(dāng)0磁頭的某個(gè)磁道讀完,下一次就讀1磁頭的相同磁道;當(dāng)1磁頭的某個(gè)磁道讀完,下一次就讀0磁頭的下一個(gè)磁道。例如:0磁頭0磁道,1磁頭0磁道,0磁頭1磁道,1磁頭的1磁道。裝載system1、if(已讀大小>=64K) then段地址+=64K;已讀大小=0;2、可讀入的扇區(qū)數(shù)量=(64k-已讀大?。?512B;3、if(可讀入的扇區(qū)數(shù)量+當(dāng)前扇區(qū)號(hào)>=磁道扇區(qū)總量) then可讀入的扇區(qū)數(shù)量=磁道扇區(qū)總量-當(dāng)前扇區(qū)號(hào);4、讀入5、if(磁道上無(wú)剩余扇區(qū))thenif(磁頭號(hào)為0)then磁頭號(hào)=1;扇區(qū)號(hào)=1;else磁頭號(hào)=0;磁道號(hào)++;扇區(qū)號(hào)=1;跳入setup139行 jmpi0,SETUPSEG在37行定義為0x9020虛擬地址:0x9020:0物理地址:0x90200setup的開始地址講課內(nèi)容bootsect.s程序分析setup.s程序分析head.s程序分析程序功能1-106行:獲取并保存系統(tǒng)參數(shù)113-126行:移動(dòng)system130-193行:進(jìn)入保護(hù)模式獲得并保存系統(tǒng)參數(shù)通過(guò)BIOS中斷調(diào)用獲得系統(tǒng)參數(shù)把獲得的系統(tǒng)參數(shù)保存在0x90000開始的內(nèi)存塊中還記得0x90000地址上的內(nèi)容嗎?程序舉例38行讀光標(biāo)位置:0x10中斷0x03功能:輸入?yún)?shù):ah:0x03bh:頁(yè)號(hào)輸出參數(shù):dh:行號(hào)dl:列號(hào)movax,0x9000movds,axmovah,0x03xorbh,bhint0x10mov[0],dxds:程序舉例獲得內(nèi)存大小:0x15中斷0x88功能:輸入?yún)?shù):ah:0x88輸出參數(shù):ax:擴(kuò)展內(nèi)存大小,單位KBmov ah,#0x88int 0x15mov [2],ax系統(tǒng)參數(shù)保存布局程序功能1-106行:獲取并保存系統(tǒng)參數(shù)113-126行:移動(dòng)system130-193行:進(jìn)入保護(hù)模式移動(dòng)system把System從0x10000(64K)移到0x00000為什么一開始不把system裝載到物理內(nèi)存0x00000處? 在bootsect和setup前一段程序中用到了實(shí)模式下的中斷調(diào)用,而這些中斷調(diào)用被安排在物理內(nèi)存0x00000開始的內(nèi)存中移動(dòng)system0x0000:00x1000:00x2000:00x3000:00x4000:00x5000:00x6000:00x7000:00x8000:00x9000:0es:dids:si程序功能1-106行:獲取并保存系統(tǒng)參數(shù)113-126行:移動(dòng)system130-193行:進(jìn)入保護(hù)模式保護(hù)模式尋址尋址就是邏輯地址到物理地址的轉(zhuǎn)換。在保護(hù)模式下有兩種內(nèi)存管理機(jī)制:分段和分頁(yè),其中分頁(yè)是可選的。三種不同地址邏輯地址:包含在機(jī)器語(yǔ)言指令中的地址,由一個(gè)段:段內(nèi)偏移組成。線性地址:邏輯地址到物理地址變換間的中間層。物理地址:內(nèi)存單元的地址。P16第2.5節(jié)保護(hù)模式尋址段選擇子段內(nèi)偏移:031015線性地址031分段物理地址031分頁(yè)段選擇子段內(nèi)偏移:031015線性地址031分段物理地址031分段——段描述符保護(hù)模式下把內(nèi)存分為多個(gè)段,每個(gè)段用一個(gè)描述符(數(shù)據(jù)結(jié)構(gòu))用來(lái)描述它的屬性,包括段的開始地址、段長(zhǎng)度、類型、訪問(wèn)權(quán)限等。段描述符由8個(gè)字節(jié)組成。段描述符的結(jié)構(gòu)BASE字段:指向段的基地址粒度標(biāo)志G:段大小的單位。G=0時(shí)以字節(jié)為單位,否則以4096B為單位。LIMIT字段:段的大小,段的長(zhǎng)度=段大?。℅=0)或段大小*4k(G=1)系統(tǒng)標(biāo)志S:系統(tǒng)段(S=0),用于存儲(chǔ)內(nèi)核數(shù)據(jù);否則是普通代碼段或數(shù)據(jù)段TYPE字段:描述段的類型DPL字段:描述符特權(quán)級(jí)別,表示為訪問(wèn)這個(gè)段而要求的CPU最小特權(quán)級(jí)。Present字段:段不在內(nèi)存中(S=0),否則段在內(nèi)存中。Linux總是把此標(biāo)志設(shè)為1,因?yàn)長(zhǎng)inux從來(lái)不把段交換到磁盤上去。D或B字段:段偏移量的地址是32位(D=1),否則是16位。AVL字段:Linux不使用保留字段,總是為0BASE(0-15)LIMIT(0-15)BASE(16-23)TYPESDPL1BASE(24-31)LIMIT(16-19)AVL0B/DG描述符表保存有多個(gè)段描述符的內(nèi)存塊(數(shù)組)叫做描述符表,分為全局描述符表(GlobalDescriptorTable,GDT)和局部描述符表(LocalDescriptorTable,LDT)GDT中定義的內(nèi)存段可以被所有進(jìn)程使用,通常只定義一個(gè);LDT中定義的內(nèi)存段只被進(jìn)程自己使用,通常每個(gè)進(jìn)程一個(gè)LDT。GDT在內(nèi)存中的地址存放在寄存器gdtr中,而當(dāng)前進(jìn)程使用的LDT的地址存放在寄存器ldtr中段選擇子實(shí)模式中,段寄存器保存的是段的基地址保護(hù)模式中,段寄存器內(nèi)容的含義發(fā)生了改變,它不再指向一個(gè)物理段的基地址了,而是一個(gè)段描述符的索引,通常把它稱為段選擇子13位索引,指定了放在GDT或LDT中的相應(yīng)段描述符TI指定了描述符是放在GDT(TI=0)中還是在LDT中(TI=1)兩位RPL(RequestorPrivilegeLevel)指定了進(jìn)程的特權(quán)級(jí)別,RPL<=DPL才能訪問(wèn)成功IndexTIRPL023115分段的實(shí)現(xiàn)給定一個(gè)邏輯地址檢查段選擇子中的TI標(biāo)志,決定段描述符是保存在哪個(gè)描述符表中,并到相應(yīng)的寄存器中取得描述符表的基地址把索引字段的值乘以8(段描述符的大小),加上描述符表的基地址,從而得到段描述符用段描述符中段的基地址加上邏輯地址中的偏移量,得到了線性地址GDTR/LDTR*+IndexTIRPL:Offset段描述符+線性地址8特權(quán)級(jí)別IA32提供了0~3四個(gè)特權(quán)級(jí)別,數(shù)字越小,級(jí)別越高高特權(quán)級(jí)可以訪問(wèn)低特權(quán)級(jí)和同一特權(quán)級(jí),而低特權(quán)級(jí)不能隨便訪問(wèn)高特權(quán)級(jí),否則產(chǎn)生常規(guī)保護(hù)錯(cuò)誤(GP)Linux只使用了其中的兩個(gè)級(jí)別,即0級(jí)別,對(duì)應(yīng)內(nèi)核態(tài);3級(jí)別,對(duì)應(yīng)用戶態(tài)0123特權(quán)級(jí)別下降特權(quán)級(jí)別IndexTIRPL023115BASE(0-15)LIMIT(0-15)BASE(16-23)TYPESDPL1BASE(24-31)LIMIT(16-19)AVL0B/DG只有段選擇子的RPL<=段描述符中的DPL才允許訪問(wèn)該描述符所代表的內(nèi)存段一般只考慮CS選擇子的RPL要做的事段機(jī)制由CPU自動(dòng)實(shí)現(xiàn),我們要做的事包括:定義好描述符表把描述符表的基地址裝入gdtr或ldtr使用正確的段選擇子gdt的定義205行g(shù)dt: .word 0,0,0,0
.word 0x07FF //8M .word 0x0000 //基地址為0 .word 0x9A00 //可讀可執(zhí)行的代碼段,dpl=0 .word 0x00C0 //粒度=4K .word 0x07FF //8M .word 0x0000 //基地址為0 .word 0x9200 //可讀寫的數(shù)據(jù)段,dpl=0 .word 0x00C0 //粒度=4Kgdt的定義BASE(0-15)LIMIT(0-15)BASE(16-23)TYPESDPL1BASE(24-31)LIMIT(16-19)AVL0B/DG0000000000000000000001111111111100000000101010010000000000001100低字節(jié)高字節(jié)0x00000x07FF0x00C00x9A00裝載gdtrGDTR寄存器包括兩部分:32-bit的物理地址,以及GDT大?。ㄒ宰止?jié)為單位)設(shè)置好GDT之后,我們需要通過(guò)LGDT指令將設(shè)定的gdt的入口地址和gdt表的大小裝入GDTR寄存器??梢允褂肔GDT指令來(lái)設(shè)置GDT。 lgdtaddr(保存gdt基地址和大小的地址)裝載gdtr134行:lgdtgdt_48222行:gdt_48: .word 0x800//gdt長(zhǎng)度2kb,256項(xiàng) .word 512+gdt,0x9//gdt的基地址gdtgdt地址的高16位gdt地址的低16位0x90000+0x200+gdt0x90200進(jìn)入保護(hù)模式控制寄存器CR0PE:允許保護(hù)模式,PE=1切換到保護(hù)模式PE進(jìn)入保護(hù)模式191行mov ax,#0x0001 lmswax//把a(bǔ)x的值裝載到cr0中執(zhí)行完setup后的內(nèi)存映像跳到head中執(zhí)行jmpi0,81000基地址為0,長(zhǎng)度為8M,gpl為0的代碼段基地址為0,長(zhǎng)度為8M,gpl為0的數(shù)據(jù)段indextirpl段選擇子0x10指的是GDT中的數(shù)據(jù)段段選擇子0x08指的是GDT中的代碼段講課內(nèi)容bootsect.s程序分析setup.s程序分析head.s程序分析Intel和AT&T語(yǔ)法Intel語(yǔ)法 操作符目的操作數(shù)源操作數(shù)AT&T語(yǔ)法 操作符源操作數(shù)目的操作數(shù) 寄存器前有%程序功能18-23行:設(shè)置數(shù)據(jù)段段選擇子和堆棧24行:設(shè)置中斷描述符表25行:設(shè)置全局描述符表135行:設(shè)置頁(yè)表,啟動(dòng)分頁(yè)并調(diào)用內(nèi)核啟動(dòng)函數(shù)main數(shù)據(jù)段段選擇子數(shù)據(jù)段段選擇子包括ds、es、fs、gs movl$0x10,%eax mov%ax,%ds mov%ax,%es mov%ax,%fs mov%ax,%gs數(shù)據(jù)段段選擇子10000基地址為0,長(zhǎng)度為8M,gpl為0的代碼段基地址為0,長(zhǎng)度為8M,gpl為0的數(shù)據(jù)段indextirpl代碼段段選擇子代碼段段選擇子包括cssetup中的最后一條語(yǔ)句已經(jīng)將cs設(shè)置為8 jmpi0,8程序功能18-23行:設(shè)置數(shù)據(jù)段段選擇子和堆棧24行:設(shè)置中斷描述符表25行:設(shè)置全局描述符表135行:設(shè)置頁(yè)表,啟動(dòng)分頁(yè)并調(diào)用內(nèi)核啟動(dòng)函數(shù)main實(shí)模式下的中斷處理當(dāng)中斷發(fā)生時(shí),用中斷號(hào)檢索中斷表,得到中斷處理程序的地址,然后進(jìn)入中斷處理程序進(jìn)行處理0號(hào)中斷處理程序地址1號(hào)中斷處理程序地址2號(hào)中斷處理程序地址3號(hào)中斷處理程序地址0x016位的段地址16位的段內(nèi)偏移保護(hù)模式下的中斷處理用中斷描述符來(lái)記錄中斷處理程序的屬性,包括處理程序的地址,DPL等。每個(gè)描述符8個(gè)字節(jié)。段選擇子段內(nèi)偏移(0-15)000D1100DPLP段內(nèi)偏移(16-31)保留中斷描述符表中斷描述符表是中斷描述符的集合,共256項(xiàng)。中斷描述符表的基地址保存在寄存器idtr中保護(hù)模式下中斷處理idtr0號(hào)中斷描述符1號(hào)中斷描述符2號(hào)中斷描述符3號(hào)中斷描述符段選擇子段內(nèi)偏移(0-15)00011100DPLP段內(nèi)偏移(16-31)保留當(dāng)中斷發(fā)生時(shí),用中斷號(hào)和中斷描述符表的基地址檢索到中斷描述符(描述符表的基地址+8*中斷號(hào)),得到中斷處理程序的地址,然后進(jìn)入中斷處理程序進(jìn)行處理要做的事中斷處理由CPU自動(dòng)實(shí)現(xiàn),我們要做的事包括:定義好中斷描述符表把中斷描述符表的基地址裝入idtr中定義中斷描述符表在232行定義了一個(gè)256*8個(gè)字節(jié)的內(nèi)存塊作為中斷描述符表,并且用0來(lái)初始化 _idt: .fill256,8,0//2k大小分配256個(gè)8字節(jié),并用0來(lái)初始化。設(shè)置中斷描述符在78-91行設(shè)置這256個(gè)中斷描述符ignor_int定義在150行,作用是打印一條消息“Unknowninterrupt”段選擇子(0x0008)段內(nèi)偏移(ignor_int地址的底16位)00011100001段內(nèi)偏移(ignor_int地址的高16位)保留0x8E00設(shè)置中斷描述符ignore_int高16位ignore_int低16位edx0x080x0eaxignore_int低16位ignore_int低16位中斷描述符中斷描述符ediedi裝載中斷描述符表基地址第92行: lidtidt_descr第222行: idt_descr:.word256*8-1//描述符表長(zhǎng)度 .long_idt//描述符表地址程序功能18-23行:設(shè)置數(shù)據(jù)段段選擇子和堆棧24行:設(shè)置中斷描述符表25行:設(shè)置全局描述符表135行:設(shè)置頁(yè)表,啟動(dòng)分頁(yè)并調(diào)用內(nèi)核啟動(dòng)函數(shù)main定義gdt234行_gdt: .quad0x0000000000000000//未用 .quad0x00c09a0000000fff//16M .quad0x00c0920000000fff//16M .quad0x0000000000000000//未用
.fill252,8,0 //預(yù)留,擴(kuò)展用共256項(xiàng),256*8=2k大小裝載段描述符表基地址106行 lgdtgdt_descr227行 gdt_descr: .word256*8-1//GDT長(zhǎng)度.long_gdt//GDT基地址設(shè)置GDT的效果虛擬地址: 0x8:0x5或0x10:0x100不論段選擇子是什么,對(duì)應(yīng)段的基地址都是0,所以 線性地址=段的基地址+段內(nèi)偏移=0+段內(nèi)偏移=段內(nèi)偏移設(shè)置GDT26行——30行movl0x10,%eaxmov%ax,%dsmov%ax,%esmov%ax,%fsmov%ax,%gs1664看不見(jiàn)部分程序功能18-23行:設(shè)置數(shù)據(jù)段段選擇子和堆棧24行:設(shè)置中斷描述符表25行:設(shè)置全局描述符表135行:設(shè)置頁(yè)表,啟動(dòng)分頁(yè)并調(diào)用內(nèi)核啟動(dòng)函數(shù)main保護(hù)模式尋址——啟動(dòng)分頁(yè)段選擇子段內(nèi)偏移:031015線性地址031物理地址031分段機(jī)制分頁(yè)機(jī)制分頁(yè)機(jī)制把內(nèi)存分成大小為4K的頁(yè)框,查找頁(yè)框需要頁(yè)目錄和頁(yè)表(一個(gè)二級(jí)查找過(guò)程)頁(yè)表/頁(yè)框的基地址頁(yè)的屬性0111231CR3頁(yè)目錄頁(yè)表頁(yè)框頁(yè)目錄表的基地址在寄存器CR3中P328分頁(yè)機(jī)制實(shí)現(xiàn)原理把線性地址分成3部分directory(10位)table(10位)offset(12位)頁(yè)目錄的地址存放在寄存器CR3中線性地址的directory決定頁(yè)目錄中的目錄項(xiàng)從頁(yè)目錄的目錄項(xiàng)的基地址中找到頁(yè)表的基地址線性地址的table決定頁(yè)表中的目錄項(xiàng)從頁(yè)表的目錄項(xiàng)的基地址中找到頁(yè)框的基地址線性地址的offset決定物理地址在頁(yè)框中的編移位置offset011table1221directory2231CR3頁(yè)目錄+頁(yè)目錄項(xiàng)頁(yè)表頁(yè)表項(xiàng)+頁(yè)框+*4*4保護(hù)模式下內(nèi)存尋址總結(jié)在程序中使用虛擬地址段選擇子:段內(nèi)偏移用段選擇子作為索引,查找全局描述符表(基地址在gdtr中),得到段的基地址用段的基地址+段內(nèi)偏移得到線性地址用線性地址的高10位作為索引,查找頁(yè)目錄表(基地址在CR3中),得到頁(yè)表的基地址用線性地址的次高10位作為索引,到上1步得到的頁(yè)表中查找,得到頁(yè)框的基地址用頁(yè)框的基地址+線性地址后12位得到物理地址頁(yè)目錄表、頁(yè)表和頁(yè)框大小頁(yè)目錄索引是10位,共可以包含210=1k個(gè)頁(yè)目錄項(xiàng),每個(gè)頁(yè)目錄項(xiàng)是4個(gè)字節(jié),所以頁(yè)目錄有4k大小頁(yè)表索引是10位,共可以包含210=1k個(gè)頁(yè)表項(xiàng),每個(gè)頁(yè)表項(xiàng)是4個(gè)字節(jié),所以頁(yè)表有4k大小頁(yè)框偏移是12位,所以頁(yè)框大小是212=4k一個(gè)頁(yè)表項(xiàng)可以映射4K線性地址一個(gè)頁(yè)表可以映射1K*4K=4M的線性地址一個(gè)頁(yè)目錄可以映射1K*4M=4G線性的地址要做的事分頁(yè)機(jī)制由CPU自動(dòng)實(shí)現(xiàn),我們要做的事包括:定義好頁(yè)目錄表和頁(yè)表設(shè)置頁(yè)目錄表和頁(yè)表把頁(yè)目錄表的基地址裝入CR3中啟動(dòng)分頁(yè)定義頁(yè)目錄和頁(yè)表第16行:_pg_dir:第114行:.org0x1000pg0:第117行:.org0x2000pg1:第120行:.org0x3000pg2:第123行:.org0x4000pg3:頁(yè)表3頁(yè)表2頁(yè)表1頁(yè)表0頁(yè)目錄0x00000x10000x20000x30000x4000包含有部分head代碼啟動(dòng)分頁(yè)清0(198——202行)stosl把eax的值保存到ds:edi中,然后修改edi。(d=0時(shí)加4;否則減4)設(shè)置頁(yè)目錄(203——206行)設(shè)置頁(yè)表(207——212行)頁(yè)表/頁(yè)框的基地址頁(yè)的屬性0111231pg07設(shè)置頁(yè)目錄表和頁(yè)表第4095個(gè)4k第0個(gè)4k(pg_dir)第1個(gè)4k(pg0)第2個(gè)4k(pg1)第3個(gè)4k(pg2)頁(yè)目錄頁(yè)表0頁(yè)表1頁(yè)表2頁(yè)表3第4094個(gè)4k第4093個(gè)4k第4092個(gè)4k
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年離婚財(cái)產(chǎn)分割及孩子撫養(yǎng)協(xié)議書
- 施工勞務(wù)承包合同協(xié)議書樣本
- 產(chǎn)業(yè)孵化基地入住協(xié)議
- 使用授權(quán)協(xié)議書要點(diǎn)解析
- 房屋互換合同格式
- 員工實(shí)習(xí)期勞務(wù)協(xié)議
- 中外專有技術(shù)轉(zhuǎn)讓協(xié)議
- 標(biāo)準(zhǔn)版委托檢驗(yàn)檢測(cè)協(xié)議書
- 5.2 凝聚價(jià)值追求 (大單元教學(xué)設(shè)計(jì)) 2024-2025學(xué)年統(tǒng)編版道德與法治九年級(jí)上冊(cè)
- 建筑項(xiàng)目施工合同書范本
- 浮動(dòng)碼頭施工方案
- Poka-Yoke防錯(cuò)技術(shù)(完整版)
- 保安交接班記錄表(2)
- 神明—EZflame火焰檢測(cè)系統(tǒng)
- 個(gè)人簡(jiǎn)歷求職簡(jiǎn)歷課件.ppt
- 2018年江蘇高考滿分作文:在母語(yǔ)的屋檐下
- 新青島版五四制2021-2022四年級(jí)科學(xué)上冊(cè)實(shí)驗(yàn)指導(dǎo)
- 小學(xué)四年級(jí)音樂(lè)課程標(biāo)準(zhǔn)
- 民用機(jī)場(chǎng)竣工驗(yàn)收質(zhì)量評(píng)定標(biāo)準(zhǔn)
- 雙向細(xì)目表和單元測(cè)試卷及組卷說(shuō)明
- 離子色譜法測(cè)定空氣中二氧化硫
評(píng)論
0/150
提交評(píng)論