




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
電子科技大學(xué)實驗報告軟件開發(fā)環(huán)境試驗-----Huffman編碼實驗2.1分割函數(shù)的三項原則分割函數(shù)的三項原則包括:與其寫注釋,不如寫函數(shù);重復(fù)就是罪惡;函數(shù)不要超過502.2Huffman編碼的基本原理本實驗要求使用Huffman編碼算法,實現(xiàn)對文件的壓縮和解壓。因此,我們首先介紹ssfilename,需要在實驗報告中給出函數(shù)調(diào)用關(guān)系圖、流程處理關(guān)系圖以實驗報告的評分標(biāo)準(zhǔn),包括以下幾個方面:實驗報告是否規(guī)范實驗報告內(nèi)容是否詳實實驗報告中的代碼注釋是否達(dá)到要求程序是否正確無誤程序是否嚴(yán)格按照分函數(shù)的原則編寫C++版本的程序類關(guān)系的耦合度如何程序?qū)崿F(xiàn)是否考慮了大文件情況六、實驗器材(設(shè)備、元器件):///統(tǒng)計詞頻時用于查找是否已經(jīng)記錄過,記錄過的話返回下標(biāo),沒有則返回0//獲取文件詞頻,記錄在NodehuffmanNode[260]的節(jié)點數(shù)組當(dāng)中voidcalWeight(char*file)/*得到待壓縮文件的總字節(jié)數(shù),權(quán)值為幾就代表著有多少個字節(jié)*/n點TreeHuffmanhuffman節(jié)點的*將編碼表寫入默認(rèn)文件當(dāng)中,并在結(jié)尾存入葉子節(jié)點數(shù)(count)與壓縮后文件的總bit數(shù)111100027count//由于詞頻表是按照字符串方式存儲的葉子節(jié)點信息,讀取出來的字符串需要轉(zhuǎn)換成int值再使用/*從編碼表文件讀取相應(yīng)信息以用來解壓文件,讀取信息包括編碼和葉子信息*//*壓縮文件*/ilecharfilecharfile/*用于在解壓的時候?qū)⒆x取到的ASCII碼轉(zhuǎn)換為二進(jìn)制數(shù)*/intswapintdata)/*進(jìn)行文件的解壓*/echarfilecharfile/主函數(shù)輸入-c命令isInNode()calWeightargv[2])teHufmanTreegetHuffmanCode()getSumBytes()getSumBits()compress_file()將編碼信息寫入編碼表文件,以備解壓使用argvargv輸入-u命令從詞頻表當(dāng)中讀取編碼信息freFromFile()wapuncompress_file()壓縮后產(chǎn)生的文件,確實是亂碼Controll類classControll//:publicHuffmanTree{cvoidcompress_file(constchar*,constchar*,constchar*);voiduncompress_file(constchar*,constchar*,constchar*);voidfreFromFile(constchar*,char**,char*,int*);intpowmy(int,int);HuffmanNode類classHuffmanNode{ccharinfo;doubleweight;//結(jié)點信息//結(jié)點權(quán)值intparent,lchild,rchild;//父親結(jié)點,左右孩子結(jié)點HuffmanNode(){parent=lchild=rchild=-1;}HuffmanNode(constchar&data,constdouble&wt,constint&pa=-1,constint&lch=-1,constint&rch=-1){dataweight=wt;rentpalchild=lch;ldrch}};//classHuffmanNodeendCode類/*現(xiàn)在我把它調(diào)出來為的就是在controlll類當(dāng)中使用這個類*/classCode{cCode():length(10){ptr=newchar[length];}~Code(){delete[]ptr;}char*ptr;constintlength;HuffmanTree類classHuffmanTree{cHuffmanTree(constint&s=100){maxSize=(s>100s:100);arrayTree=newHuffmanNode[maxSize];currentSize=0;codeArray=0;}~HuffmanTree(){rayTreeif(codeArray!=0)delete[]codeArray;}voidrun(constchar*,constchar*);intgetSumBytes();//定義待壓縮文件的總bytes數(shù)intcurrentSize;//當(dāng)前數(shù)組大小HuffmanNode*arrayTree;//哈夫曼結(jié)點數(shù)組ecodeArraycurrentSizeintsum_bits;//定義壓縮后文件的總bit數(shù)intmaxSize;//數(shù)組最大值//intsum_bytes;voidinsert(constchar&,constdouble&);//插入結(jié)點voidcreateHuffmanTree();//創(chuàng)建哈夫曼樹voidcreateHuffmanCode();//創(chuàng)建哈夫曼編碼voidwriteCodeToFile(constchar*);//將Huffman編碼寫入到詞頻表文件當(dāng)中intfindPosition(constchar&)const;//返回字符在arrayTree[]中的位置intisEqual(constchar*s)const;//判斷s是否存在于編碼系統(tǒng)中,若存在則返回s在編碼系統(tǒng)中的位置,否則返回-1voidreverse(chararr[]);};//classHuffmanTreeend類關(guān)系圖Code類HuffmanTree類HuffmanNode類Control類電子科技大學(xué)實驗報告學(xué)號:五、實驗器材(設(shè)備、元器件):2.2if語句的反匯編{{}}反匯編代碼00DD138Emovdwordptr[ebp-8],300DD1395cmpdwordptr[ebp-8],300DD1399jle{00DD139Bmov}00DD13A2xor00DD138Emovdwordptr[ebp-8],3我們在程序當(dāng)中定義了一個局部變量inti=3。{DD1370以上是該程序入口處的反匯編代碼,看得出來程序首先將ebp壓棧,然后將現(xiàn)在的棧頂指針esp賦值ebpebpn就可以表示ebp后面n字節(jié)的地址了),然后我個字節(jié),所以就在[ebp-8]加上dwordptr用來指明數(shù)據(jù)的字節(jié)數(shù)00DD1395cmpdwordptr[ebp-8],3同上dwordptr[ebp-8]是指明數(shù)據(jù)字節(jié)數(shù),獲取i數(shù)據(jù)值,cmp是將i值與3進(jìn)行比較,其實就是執(zhí)行i-3,然后在標(biāo)志寄存器(PSW----ProgramStatusWord)的各位反應(yīng)比較的結(jié)果。00DD1399jle00DD13A2jle(jle,jumpiflightorequal)的含義是第一個操作數(shù)小于或等于第二個操作數(shù)時跳轉(zhuǎn)(當(dāng)然此時就是通過標(biāo)志寄存器(PSW----ProgramStatusWord)中的數(shù)值來判斷)。然后我們觀察跳轉(zhuǎn)地址00DD13A2其實就是00DD13A2xoreax,eax最后一句return0的代碼。00DD139Bmovdwordptr[ebp-8],4這是if條件語句里面的代碼,將i值賦值為4,同理,dwordptr[ebp-8]是通過ebp-8找尋到i的地址單元,然后dwordptr說明字節(jié)數(shù),mov指令將4賦給這個地址(就是i的存放地址);00DD13A2xor程序返回0eax清零代碼清單3{{}}0122138Emovdwordptr[ebp-8],301221395cmpdwordptr[ebp-8],301221399jge012213A2{0122139Bmov}012213A2xor0122138Emovdwordptr[ebp-8],3該地址數(shù)據(jù)由4字節(jié)構(gòu)成,然后通過mov指令將3賦值給i。01221395cmpdwordptr[ebp-8],3dwordptr[ebp-8]是指明數(shù)據(jù)字節(jié)數(shù),獲取i數(shù)據(jù)值(ebp-8是i變量的地址,[ebp-8]是i變量),cmp是將i值與3進(jìn)行比較,其實就是執(zhí)行i-3,然后在標(biāo)志寄存器(PSW----ProgramStatusWord)的各位反應(yīng)比較的01221399jge012213A2通過與代碼清單2的比較我們可以得出,jge(jge,jumpifgreaterorequal)是當(dāng)?shù)谝粋€操作數(shù)大于或者等于第二個操作數(shù)的時候進(jìn)行跳轉(zhuǎn)。且跳轉(zhuǎn)地址就是return0代碼的地址。0122139Bmovdwordptr[ebp-8],4這是if條件語句里面的代碼,將i值賦值為4,同理,dwordptr[ebp-8]是通過ebp-8找尋到i的地址單元,然后dwordptr說明字節(jié)數(shù),mov指令將4賦給這個地址(就是i的存放地址);012213A2xoreax,eax程序返回0eax清零清單4{{}}碼清單4的反匯編代碼及解釋002B138Emov002B1395cmp002B1399jne{002B139Bmov}002B13A2xor}ppp002B138Emovdwordptr[ebp-8],3該地址數(shù)據(jù)由4字節(jié)構(gòu)成,然后通過mov指令將3賦值給i。002B1395cmpdwordptr[ebp-8],3dwordptr[ebp-8]是指明數(shù)據(jù)字節(jié)數(shù),獲取i數(shù)據(jù)值(ebp-8是i變量的地址,[ebp-8]是i變量),cmp是將i值與3進(jìn)行比較,其實就是執(zhí)行i-3,然后在標(biāo)志寄存器(PSWProgramStatusWord)的各位反應(yīng)比較的002B1399jne002B13A2通過與代碼清單2的比較我們可以得出,jne(jne,jumpifnotequal)是當(dāng)?shù)谝粋€操作數(shù)不等于第二個操作數(shù)的時候進(jìn)行跳轉(zhuǎn)。且跳轉(zhuǎn)地址就是return0代碼的地址。002B139Bmovdwordptr[ebp-8],4這是if條件語句里面的代碼,將i值賦值為4,同理,dwordptr[ebp-8]是通過ebp-8找尋到i的地址單元,然后dwordptr說明字節(jié)數(shù),mov指令將4賦給這個地址(就是i的存放地址);002B13A2xor程序返回0eax清零另外,還可以自行實驗<=、>=時的情況。在實驗報告中,給出這些情況的反匯編代碼及編代碼規(guī)則。00CF138Emovif(i==3)00CF1395cmp00CF1399jl{00CF139Bmov}pp00CF13A2xoreax,eax***00CF1399jl00CF13A2通過與代碼清單2的比較我們可以得出,jl(jne,jumpifless)是當(dāng)?shù)谝粋€操作數(shù)小于第二個操作數(shù)的時候進(jìn)行跳轉(zhuǎn)。且跳轉(zhuǎn)地址就是return0代碼的地址。下面是<=代碼的反匯編代碼:008C138Emovdwordptr[ebp-8],3if(i==3)ifi)008C1395cmp008C1399jg{008C139Bmov}008C13A2xor008C1399jg008C13A2通過與代碼清單2的比較我們可以得出,jg(jne,jumpifgreater)是當(dāng)?shù)谝粋€操作數(shù)大于第二個操作數(shù)的時候進(jìn)行跳轉(zhuǎn)。且跳轉(zhuǎn)地址就是return0代碼的地址。條件判斷語句的反匯編代碼規(guī)則:cmp件判斷比較Jxx用于在不符合判斷的情況下跳轉(zhuǎn)到后面的代碼處jg(jne,jumpifgreater)jl(jne,jumpifless)jne(jne,jumpifnotequal)jge(jge,jumpifgreaterorequal)jle(jle,jumpiflightorequal)ifelse的反匯編{{}{}}00F9138Emovdwordptr[ebp-8],300F91395cmp00F91399jge{00F9139Bmov}00F913A2jmp{00F913A4mov}00F913ABxor}由于一些相類似的反匯編指令已經(jīng)在前面做了詳盡的解釋,下面重點對ifelse代碼的反匯編進(jìn)行解釋:00F91395cmpdwordptr[ebp-8],300F91399jge00F913A4如果第一個操作數(shù)大于或者等于第二個操作數(shù)就跳轉(zhuǎn)到00F913A4這個位置去執(zhí)行指令代碼,這個位置{00F913A4movdwordptr[ebp-8],5}是else里面的內(nèi)容,執(zhí)行完畢之后就00F913ABxoreax,eax如果沒有進(jìn)行跳轉(zhuǎn)的話(第一個操作數(shù)大于第二個操作數(shù)){00F9139Bmovdwordptr[ebp-8],4}00F913A2jmp00F913AB執(zhí)行到else下面的代碼之后就跳轉(zhuǎn)到了00F913ABxoreax,eax00F913AB這個位置,而這個地址的指令代碼是。if-else構(gòu)成的多分支流程的反匯編代碼的規(guī)律:cmp操作數(shù)1操作數(shù)2jxxelse里面的反匯編代碼地址;若不符合條件則跳轉(zhuǎn){If條件語句里的反匯編代碼}ejmp下面一個大括號后的反匯編代碼地址{else條件語句里面的反匯編代碼}{{}fi{}{}{}fi{}{}}inti=3;00E9138Emovifi>30)00E91395cmp00E91399jledwordptr[ebp-8],3//定義變量i=3dwordptr[ebp-8],1Eh//對i和30這個兩個操作數(shù)進(jìn)行比較00E913A4//如果操作數(shù)1小于等于操作數(shù)2,跳轉(zhuǎn),//且地址為大括號后面指令代碼地址{i00E9139Bmov00E913A2jmp}elseif(i>=20)00E913A4cmp00E913A8jldwordptr[dwordptr[ebp-8],400E913E7//執(zhí)行完畢后直接跳到返回語句處dwordptr[ebp-8],14h//與20再判斷00E913B3//若前一個條件判斷為假,則跳至此處//如果不符合此處的if條件語句則跳轉(zhuǎn)//到下一個if條件處{i=5;00E913AAmov00E913B1jmp}dwordptr[ebp-8],500E913E7//若符合前一個if條件,執(zhí)行賦值語句//執(zhí)行完畢后直接跳到返回語句處elseif(i<=5)00E913B3cmp00E913B7jg{i=6;00E913B9mov00E913C0jmp}elseif(i<10)00E913C2cmp00E913C6jge{i00E913C8mov00E913CFjmp}elseif(i==12)mpjne00Empjne00E913D5{00E913D7movdwordptr[ebp-8],5//若前一個條件判斷為假,則跳至此處//與5再比較判斷00E913C2//00E913C2//下一個if條件處以下類似,不做//重復(fù)解釋dwordptr[ebp-8],600E913E7dwordptr[ebp-8],0Ah00E913D1dwordptr[ebp-8],700E913E7//此時到達(dá)了最后一個if條件判//斷處,按照上面if-else的匯編//解釋執(zhí)行dwordptr[ebp-8],0Ch00E913E0dwordptr[ebp-8],8}lse00E913DEjmp{00E913E0mov}turn00E913E7xor}00E913E7dwordptr[ebp-8],9xif()jxx地址(如果不符合if條件就跳轉(zhuǎn)到下一個if條件處再進(jìn)行比較){................................jmp整個多分支流程語句后的指令地址}elseif()jxx地址(如果不符合if條件就跳轉(zhuǎn)到下一個if條件處再進(jìn)行比較){................................jmp整個多分支流程語句后的指令地址}elseif()jxx地址(如果不符合if條件就跳轉(zhuǎn)到下一個if條件處再進(jìn)行比較){................................jmp整個多分支流程語句后的指令地址}elseif()jxx地址(如果不符合if條件就跳轉(zhuǎn)到else條件處再進(jìn)行比較){.}jmp整個多分支流程語句后的指令地址{..................................}2.4循環(huán)的反匯編析,給出for循環(huán)反匯編代碼的for(inti=0;i<10;i++){jxxxxx如果仍舊滿足條件,向下執(zhí)行;否則跳轉(zhuǎn)到C處向下執(zhí)行}{ilei{j++;}}0025138Emov00251395movi{j++;002513A2mov002513A5add002513A8mov}ovjmp002513B6xorpphebphheax在代碼清單10當(dāng)中,在地址0025138E處movdwordptr[ebp-8],0將[ebp-8]設(shè)置為0,即將i設(shè)置為0;同理在地址00251395處movdwordptr[ebp-14h],0將[ebp-14]設(shè)置為0,即將j設(shè)置為0;在地址0025139C處cmpdwordptr[ebp-8],0Ah,將i的值與10做比較,在地址002513A0處jge002513B6如果i小于10,則繼續(xù)向下執(zhí)行,若i>=10則跳轉(zhuǎn)到002513B6處執(zhí)行(即返回語句),若繼續(xù)向下執(zhí)002513AE002513B1對i進(jìn)行加一操作;在002513B4jmp0025139C跳轉(zhuǎn)回cmp的指令處繼續(xù)執(zhí)行。通過代碼清單10的反匯編結(jié)果,while語句的反匯編代碼規(guī)律A:cmp操作數(shù)1操作數(shù)2while循環(huán)結(jié)束條件做比較jxxB{}jmpA跳轉(zhuǎn)到A處繼續(xù)執(zhí)行B:....................................{{j++;}lei}0019138Emovdwordptr[ebp-8],000191395movdwordptr[ebp-14h],0{j++;0019139Cmov0019139Fadd001913A2mov001913A5mov001913A8add001913ABmov}001913AEcmp001913B2jl001913B4xor}ebphheaxebphAh在代碼清單11當(dāng)中,在地址0019138E處將[ebp-8]設(shè)置為0,即將j設(shè)置為0,在地址00191395處,將00191395設(shè)置為0,即將iCFAjAA001913AB三個地址處執(zhí)行i增1的操作。在地址001913AE處執(zhí)行循環(huán)條件比較指令cmpdwordptr[ebp-14h],0Ah在接下來的001913B2jl0019139C這條指令當(dāng)中,如果操作數(shù)1即i小于操作數(shù)2即10,就跳轉(zhuǎn)到0019139C。{循環(huán)體指令代碼A:........................................................................................................................................................................}while();cmp操作數(shù)1操作數(shù)2do------while循環(huán)條件判斷語句jxxA如果符合條件的話,就跳轉(zhuǎn)到A處的循環(huán)體部分開始執(zhí)行,否則繼續(xù)向下執(zhí)行電子科技大學(xué)實驗報告學(xué)號:了防止棧上局部數(shù)組溢出,又采取了特殊的保護(hù)措施。本實驗就需要通過觀本實驗總體目的是,通過使用VisualStudio2008查看函數(shù)調(diào)用時參數(shù)、局部變量等在六、實驗器材(設(shè)備、元器件):oidf{}{}f{}返回地址前幀ebp的值....原ebx的值原edi的值在008D13A0地址處將ebp的值壓入堆棧,并在008D13A1地址處將現(xiàn)在棧頂esp的值賦給ebp,然后再008D13A3處將esp的值減去0C0h,此時棧又向下面生長了0C0h個單位。然后在008D13A9008D13AA008D13AB三個地址處依次將處,將ebp-0C0h這個地址值賦給edi。008D13B2movecx,30hCChstoseaxedi后在這里將edi的值include"stdafx.h"oidf{}{}f{002513A0push002513A1mov002513A3sub002513A9push002513AApush002513ABpush002513AClea002513B2mov002513B7mov002513BCrepstosinti=0;002513BEmov}002513C5pop002513C6pop002513C7pop002513CApop002513CBret根據(jù)代碼清單4,以及內(nèi)存映像(調(diào)式->窗口->內(nèi)存)可畫出棧幀的布局,即圖3。返回地址i....3只有一個整型局部變量時的布局代碼清單4的實現(xiàn)步驟總體類似于代碼清單2,也是首先將ebp壓棧,然后將esp保存進(jìn)ebp,有所變化的就是這次是將esp的值減去0CCh,比上一次無局部變在實驗報告中,需要分別給出只有一個char類型局部變量、只有一個short類型局部變量,double代碼清單5、代碼清單6、代碼清單7中f函chari=0;的反匯編代碼清單5:f{00AE13BEmov}ebp-4bpebp-0x0Chi是shorti=0;的反匯編代碼清單6:df{012313BExor012313C0mov}ebp-8ebp-0x0Chhaxidoublei=0;的反匯編代碼清單7:f{pstos}C013C13C9ret地址ebp-4ebp-0x0Chioidf{i}{}得到代碼清單9:f{stos00D813BEmov00D813C2mov}h根據(jù)代碼清單9,以及內(nèi)存映像(調(diào)式->窗口->內(nèi)存)可畫出棧幀的布局,即圖4。從圖4可以看出,當(dāng)增加一個局部變量時,這個局部變量的上方和下方都會填充若干個首先將ebp壓棧,然后將現(xiàn)在esp(棧頂指針)的值賦給ebp(保存原始現(xiàn)場),然后ebph,bpoidf{iortj}{}f{stos00F613BEmovj00F613C2xor00F613C4mov}00F613CErethaxi字節(jié))j(2個字節(jié))oidf{ij}{}f{pstos000213BEmov000213C2mov}返回地址0xcccccccci0xcccccccc0xccccccccj0xcccccccccccccccxcoidf{ihortk}{}f{pstos00A313BEmov00A313C2mov00A313C9xor00A313CBmov}esp值減去intj為0intj為0ax/恢復(fù)現(xiàn)場i字節(jié))j(4個字節(jié))0xcccccccc(共計有0xc0(1)將ebp壓棧保存。pushebp;(2)將esp的值賦給ebp寄存器。movebpesp;(3)根據(jù)局部變量的個數(shù)類型分配棧大小棧大小=0xc0+變量個數(shù)*0x0c(4)將ebx,esi,edi的值壓棧(5)將ebp-棧大小的值賦值給edileaedi[ebp-棧大小](6)將eax賦值為0xcccccccc然后調(diào)用stos指令初始化棧(7)charintshort三種類型局部變量的棧分配方式不同__security_cookie進(jìn)行了比較。正常情況下,這兩者應(yīng)該是相等的。若有越界寫的行為,可能ycookiejnenotequal在實驗報告中,為代碼清單13添加代碼,造成越界寫的效果,使得清單15中的ecx和果i....include"stdafx.h"oidf{i}{}通過棧幀的布圖可以看出,我們通過a[36]就可以訪問到我們的__security_cookie,通過更改e下面是反匯編調(diào)試后的代碼,逐步調(diào)試,按F11鍵進(jìn)入__security_check_cookie函數(shù),我們查看執(zhí)行我們看到確實是執(zhí)行了failure后面的程序,然后繼續(xù)運(yùn)行直至報錯。include"stdafx.h"oidf{}{}f{pstos01211A5Emov}chara[1](一字節(jié))include"stdafx.h"oidf{}{}f{pstos004113BEmov}h0xcccccccc(共計有0x0D
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中心學(xué)??剌z保學(xué)工作總結(jié)
- 2024-2025學(xué)年江蘇省南京市高一上冊10月月考數(shù)學(xué)質(zhì)量檢測試題(含解析)
- 合作共建協(xié)議合同范例
- 關(guān)于酒商合同范例
- 發(fā)廊員工合同范本
- 合作購車合同范例
- 臺灣固化地坪購買合同范例
- 合伙分紅合同范例
- 第2章 第1節(jié) 第1課時 地形類型多樣山區(qū)面積廣大(新教學(xué)設(shè)計)2023-2024學(xué)年八年級上冊地理(人教版)
- 公司承包小區(qū)物業(yè)合同范例
- 營銷培訓(xùn):揭秘銷售成功密碼
- 《測繪管理法律與法規(guī)》課件-測繪資質(zhì)管理
- DB37T 5245-2022 橋梁智慧健康監(jiān)測技術(shù)標(biāo)準(zhǔn)
- 玩轉(zhuǎn)微木工:零基礎(chǔ)木作小件
- 社區(qū)圖書館設(shè)計任務(wù)書
- 蒂森克虜伯電梯 meta200 MRL MOB 安裝培訓(xùn) AP (無腳手架安裝工藝)
- 民警違法違紀(jì)的預(yù)防策略
- 健康體檢結(jié)果調(diào)查分析報告范文
- 機(jī)械性能試驗報告模板
- 2022內(nèi)蒙古烏審旗圖克鎮(zhèn)圖克工業(yè)園區(qū)中天合創(chuàng)化工分公司招聘20人上岸筆試歷年難、易錯點考題附帶參考答案與詳解
- 妊娠期高血壓疾病診治指南2020完整版
評論
0/150
提交評論