版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課 程 實(shí) 驗(yàn) 報(bào) 告課程名稱: 匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn) 實(shí)驗(yàn)名稱: 實(shí)驗(yàn)四 輸入輸出與中斷處理程序設(shè)計(jì) 實(shí)驗(yàn)時(shí)間: 2017-4-19,14:00-17:30 實(shí)驗(yàn)地點(diǎn): 南一樓804室74號(hào)實(shí)驗(yàn)臺(tái) 指導(dǎo)教師: 班鵬新 專業(yè)班級(jí):計(jì)算機(jī)科學(xué)與技術(shù)1503班學(xué) 號(hào): U201514558 姓 名: 劉偉光 同組學(xué)生: 余昆 劉智博 報(bào)告日期: 2017年 4 月 19日 原創(chuàng)性聲明 本人鄭重聲明:本報(bào)告的內(nèi)容由本人獨(dú)立完成,有關(guān)觀點(diǎn)、方法、數(shù)據(jù)和文獻(xiàn)等的引用已經(jīng)在文中指出。除文中已經(jīng)注明引用的內(nèi)容外,本報(bào)告不包含任何其他個(gè)人或集體已經(jīng)公開發(fā)表的作品或成果,不存在剽竊、抄襲行為。特此聲
2、明!學(xué)生簽名: 日期: 2017.4.19 成績(jī)?cè)u(píng)定實(shí)驗(yàn)完成質(zhì)量得分(70分)(實(shí)驗(yàn)步驟清晰詳細(xì)深入,實(shí)驗(yàn)記錄真實(shí)完整等)報(bào)告撰寫質(zhì)量得分(30分)(報(bào)告規(guī)范、完整、通順、詳實(shí)等)總成績(jī)(100分)指導(dǎo)教師簽字: 日期:匯 編 語(yǔ) 言 程 序 設(shè) 計(jì) 實(shí) 驗(yàn) 報(bào) 告目錄1實(shí)驗(yàn)?zāi)康呐c要求22實(shí)驗(yàn)內(nèi)容23實(shí)驗(yàn)過(guò)程33.1任務(wù)133.1.1設(shè)計(jì)思想及存儲(chǔ)單元分配3
3、3.1.2流程圖33.1.3源程序33.1.4實(shí)驗(yàn)步驟43.1.5實(shí)驗(yàn)記錄43.2任務(wù)263.2.1設(shè)計(jì)思想及存儲(chǔ)單元分配63.2.2流程圖63.2.3源程序63.2.4實(shí)驗(yàn)步驟93.2.5實(shí)驗(yàn)記錄93.3任務(wù)3113.3.1設(shè)計(jì)思想及存儲(chǔ)單元分配113.3.2流程圖113.3.3源程序113.3.4實(shí)驗(yàn)步驟133.3.5實(shí)驗(yàn)記錄133.4任務(wù)4143.4.1設(shè)計(jì)思想及存儲(chǔ)單元分配143.4.2流程圖143.4.3源程序153.4.4實(shí)驗(yàn)步驟223.4.5實(shí)驗(yàn)記錄223.5任務(wù)5233.5.1設(shè)計(jì)思想及存儲(chǔ)單元分配233.5.2流程圖233.5.3源程序233.5.4實(shí)驗(yàn)步驟233.5.5實(shí)驗(yàn)
4、記錄234體會(huì)26參考文獻(xiàn)271 實(shí)驗(yàn)?zāi)康呐c要求(1) 掌握中斷矢量表的概念;(2) 熟悉I/O訪問(wèn),BIOS功能調(diào)用方法;(3) 掌握實(shí)方式下中斷處理程序的編制與調(diào)試方法。2 實(shí)驗(yàn)內(nèi)容任務(wù)1:用三種方式獲取中斷類型碼16H對(duì)應(yīng)的中斷處理程序的入口地址。要求:首先要進(jìn)入虛擬機(jī)狀態(tài),然后(1) 直接運(yùn)行調(diào)試工具(TD.EXE),觀察中斷矢量表中的信息。(2) 編寫程序,用16H功能調(diào)用方式獲取(16H的使用可查閱教材附錄),觀察功能調(diào)用相應(yīng)的出口參數(shù)與“(1)”看到的結(jié)果是否相同 (使用TD觀看出口參數(shù)即可)。(3) 編寫程序,直接讀取相應(yīng)內(nèi)存單元,觀察讀到的數(shù)據(jù)與“(1)”看到的結(jié)果是否相同
5、(使用TD觀看程序的執(zhí)行結(jié)果即可)。 任務(wù)2:編寫一個(gè)接管鍵盤中斷的中斷服務(wù)程序并駐留內(nèi)存,要求在程序返回DOS操作系統(tǒng)后,鍵盤上的小寫字母都變成了大寫字母。要求:(1)在 DOS虛擬機(jī)或DOS窗口下執(zhí)行程序,中斷服務(wù)程序駐留內(nèi)存。(2)在DOS命令行下鍵入小寫字母,屏幕顯示為大寫,鍵入大寫時(shí)不變。執(zhí)行TD,在代碼區(qū)輸入指令“mov AX,0”看是否能發(fā)生變化。 (3)選作:另外編寫一個(gè)中斷服務(wù)程序的卸載程序,將鍵盤中斷服務(wù)程序恢復(fù)到原來(lái)的狀態(tài)任務(wù)3:讀取CMOS內(nèi)指定單元的信息,按照16進(jìn)制形式顯示在屏幕上。要求:(1) 先輸入待讀取的CMOS內(nèi)部單元的地址編號(hào)(可以只處理編號(hào)小于10的地址
6、單元)。再使用IN/OUT指令,讀取CMOS內(nèi)的指定單元的信息。 (2) 將讀取的信息用16進(jìn)制的形式顯示在屏幕上。若是時(shí)間信息,可以人工判斷一下是否正確。3 實(shí)驗(yàn)過(guò)程3.1 任務(wù)13.1.1 設(shè)計(jì)思想及存儲(chǔ)單元分配用三種方式獲取中斷類型碼10H對(duì)應(yīng)的中斷處理程序的入口地址。1.直接在td中觀察指定ds:58H中的值和ds:5A中的值。2.系統(tǒng)功能調(diào)用35H,入口參數(shù)為AL=16H,取中斷信息。3.直接把主存中的DS:58H,DS:5AH賦值給寄存器BX和CX。3.1.2 流程圖 無(wú)3.1.3 源程序1.程序名41.386 STACK SEGMENT USE16 STACK DB 200 DU
7、P(0)STACK ENDSCODE SEGMENT USE16 ASSUME CS:CODE START: XOR AX,AX MOV DS,AX MOV AX,3516H INT 21H MOV AH,4CH INT 21H CODE ENDSEND START 2.程序名42 .386 STACK SEGMENT USE16 STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT USE16 ASSUME CS:CODE, SS:STACKSTART: XOR AX,AX MOV DS,AX XOR BX,BX XOR CX,CX MOV BX,DS:58H
8、MOV CX,DS:5aH MOV AH,4CH INT 21H CODE ENDS END START3.1.4 實(shí)驗(yàn)步驟1.直接運(yùn)行td,直接計(jì)算16h所調(diào)用的中斷矢量表的位置的段首址和偏移地址,分別是58h和5Ah。在數(shù)據(jù)段中輸入ds:58h,觀察其值。2.將程序41編譯、鏈接,調(diào)試直到?jīng)]有錯(cuò)誤。運(yùn)行td 41,在td中單步調(diào)試,觀察es與bx的改變情況;3.將程序42編譯、鏈接,調(diào)試直到?jīng)]有錯(cuò)誤。運(yùn)行td 42,在td中單步調(diào)試,觀察寄存器的值。4.總結(jié)計(jì)算中斷指令表的規(guī)律和總結(jié)錯(cuò)誤。3.1.5 實(shí)驗(yàn)記錄1.實(shí)驗(yàn)環(huán)境條件: 16M內(nèi)存;WINDOWS XP命令行窗口;EDIT.EXE
9、2.0;MASM.EXE 6.0; LINK.EXE 5.2; TD.EXE 5.0。 2.方法一,直接觀察ds段,可以觀察到從0:40h開始低2個(gè)字節(jié)為11E0,高2個(gè)字節(jié)為F000;觀察如圖3.1.1所示。圖3.1.1 直接觀察td中的主存3.方法二,調(diào)用35號(hào)系統(tǒng)功能,在TD內(nèi)觀察到es為11E0,bx為11E0;觀察如圖3.1.2所示。圖3.1.2 調(diào)用35號(hào)功能觀察分析:可以直接調(diào)用35號(hào)調(diào)用來(lái)獲取中斷入口地址。4.方法三,將0:40h開始的低2個(gè)字節(jié)移至bx,高2個(gè)字節(jié)移至cx,得到cx為F000,bx為11E0;觀察如圖3.1.3所示。圖3.1.3 通過(guò)寄存器觀察中斷矢量表5.比
10、較上述三種方法得到的結(jié)果,發(fā)現(xiàn)它們一致,說(shuō)明以上方法實(shí)施得到的結(jié)果準(zhǔn)確無(wú)誤。6.(思考題)總結(jié)分析:在計(jì)算中斷矢量表位置時(shí),計(jì)算第n個(gè)中斷指令可用ds:n*4和ds:n*4+2分別得到其位置,值得注意的是在TD中使用的是16進(jìn)制,需要做一些適量轉(zhuǎn)化.。在這次中總結(jié)錯(cuò)誤為,如果匯編代碼沒(méi)有執(zhí)行語(yǔ)句MOV DS,AX的話,其內(nèi)存中保存的值不會(huì)是中斷矢量表。錯(cuò)誤如圖3.1.4所示:圖3.1.4 沒(méi)有執(zhí)行MOV DS,AX的主存3.2 任務(wù)23.2.1 設(shè)計(jì)思想及存儲(chǔ)單元分配設(shè)計(jì)思想:修改鍵盤驅(qū)動(dòng)中斷程序(int 16h),將中斷矢量表0:58h開始的4個(gè)字節(jié)修改為新的中斷程序的偏移地址和段首址,并保
11、存號(hào)舊的鍵盤驅(qū)動(dòng)中斷程序的偏移地址和段首址。在新的中斷程序中,先判斷用戶調(diào)用的是否為鍵盤驅(qū)動(dòng)中斷程序的讀入鍵盤功能,若不是,則直接調(diào)用舊的鍵盤驅(qū)動(dòng)中斷程序;若是,則對(duì)輸入進(jìn)行處理。實(shí)際上我們改變出口參數(shù)中AL的值即是鍵入字符的ASCII碼即可實(shí)現(xiàn)。3.2.2 流程圖任務(wù)2流程圖如圖3.2.1所示。圖3.2.1任務(wù)2流程圖3.2.3 源程序程序名43 接管中斷程序.386DATA SEGMENT USE16DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,SS:STACKOLD_INT DW ?,?NEW16H:CMP AH,00H JE ATB CMP AH
12、,10H JE ATB JMP DWORD PTR OLD_INTATB: PUSHF CALL DWORD PTR OLD_INT CMP AL,97 ;比較輸入的ascii碼 JAE NEXT1 JMP QUITNEXT1: CMP AL,122 JBE TOBIG JMP QUITTOBIG: sub AL,32QUIT: IRET START: XOR AX,AX MOV DS,AX MOV AX,DS:16H*4 MOV OLD_INT,AX ;保存偏移部分 MOV AX,DS:16H*4+2 MOV OLD_INT+2,AX ;保存段值 CLI MOV WORD PTR DS:16
13、H*4,OFFSET NEW16H MOV DS:16H*4+2,CS STI MOV DX,OFFSET START+15 SHR DX,4 ADD DX,10H MOV AL,0 MOV AH,31H INT 21HCODE ENDSSTACK SEGMENT USE16 STACK DB 200 DUP(0)STACK ENDS END START程序名44卸載中斷指令.386DATA SEGMENT USE16DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,SS:STACKOLD_INT DW ?,?NEW16H:CMP AH,00H JE ATB
14、 CMP AH,10H JE ATB JMP DWORD PTR OLD_INTATB: PUSHF CALL DWORD PTR OLD_INT CMP AL,97 ;比較輸入的ascii碼 JAE NEXT1 JMP QUITNEXT1: CMP AL,122 JBE TOBIG JMP QUITTOBIG: sub AL,32QUIT: IRET START: XOR AX,AX MOV DS,AX MOV AX,DS:16H*4 MOV OLD_INT,AX ;保存偏移部分 MOV AX,DS:16H*4+2 MOV OLD_INT+2,AX ;保存段值 CLI MOV WORD PT
15、R DS:16H*4,11E0H MOV WORD PTR DS:16H*4+2,F000H STI MOV DX,OFFSET START+15 SHR DX,4 ADD DX,10H MOV AL,0 MOV AH,31H INT 21HCODE ENDSSTACK SEGMENT USE16 STACK DB 200 DUP(0)STACK ENDS END START3.2.4 實(shí)驗(yàn)步驟1.編譯,鏈接。2. 觀察提示信息,若出錯(cuò),則用編輯程序修改錯(cuò)誤,修改后再重新編譯。3. 在鍵盤鍵入小寫字母和大寫字母,用空格符號(hào)分開,觀察輸出。4. (思考題)在DOS命令行下鍵入小寫字母,屏幕顯示為
16、大寫,鍵入大寫時(shí)不變。執(zhí)行TD,在代碼區(qū)輸入指令“mov AX,0”看是否能發(fā)生變化。5. (思考題)編寫中斷服務(wù)程序的終止程序,并做觀察。6. (思考題)同時(shí)打開另外一個(gè)虛擬DOS窗口,鍵盤大小寫是否被替代。3.2.5 實(shí)驗(yàn)記錄1.實(shí)驗(yàn)環(huán)境條件:16M內(nèi)存;WINDOWS XP命令行窗口;EDIT.EXE 2.0;MASM.EXE 6.0; LINK.EXE 5.2; TD.EXE 5.0。 2. 在鍵盤鍵入小寫字母和大寫字母,用空格符號(hào)分開,觀察輸出當(dāng)輸入小寫的abyz加空格和大寫的ABYZ,輸出如圖3.2.2所示:圖3.2.2執(zhí)行程序后的輸入顯示3.(思考題)通過(guò)編寫代碼發(fā)現(xiàn),將舊的中斷
17、程序的偏移地址與首地址保存下來(lái)后,可有有兩種方式調(diào)用舊的中斷程序: Jmp dword ptr old_int;Call dword ptr old_int; 前一種方式,可直接結(jié)束新的(不返回至)中斷程序;后一種方式,可返回至新的中斷程序。4.(可選題)運(yùn)行卸載程序,觀察卸載結(jié)果,先運(yùn)行43程序,再運(yùn)行44程序。輸出如圖3.2.3所示:圖3.2.3運(yùn)行卸載程序之后觀察大小寫5. (思考題)在DOS命令行下鍵入小寫字母,屏幕顯示為大寫,鍵入大寫時(shí)不變。執(zhí)行TD,在代碼區(qū)輸入指令“mov AX,0”,觀察其變化。顯示如圖3.2.4所示:圖3.2.3運(yùn)行新的中斷程序后再td中輸入“mov AX,0
18、”分析:在DOS虛擬機(jī)上運(yùn)行了改變?yōu)樾碌闹袛嗵幚沓绦颍贒OS中將小寫變?yōu)榱舜髮?,但是運(yùn)行了TD,在TD中寫語(yǔ)句小寫并沒(méi)有變成大寫,可見(jiàn)中斷處理程序的影響范圍是有限的。6. (思考題)同時(shí)打開另外一個(gè)虛擬DOS窗口,觀察鍵盤大小寫是否被替代。圖3.2.4觀察鍵盤大小寫是否被替代由觀察可知在新的DOS窗口中,其大小寫沒(méi)有改變。7.錯(cuò)誤總結(jié)一:在卸載程序時(shí)寫了一句MOV WORD PTR DS:16H*4+2,F000H,但是編譯器給報(bào)出錯(cuò)誤,分析原因后,是因?yàn)橐訤開頭編譯器會(huì)將其視為變量的名字,所以報(bào)出錯(cuò)誤,解決方案是在其前面加0。顯示的錯(cuò)誤如圖3.2.5圖3.2.5將F000H賦予寄存器值時(shí)發(fā)
19、生錯(cuò)誤3.3 任務(wù)33.3.1 設(shè)計(jì)思想及存儲(chǔ)單元分配1號(hào)系統(tǒng)功能調(diào)用讀入字符,將用戶輸入轉(zhuǎn)化為數(shù)字,作為信息的偏移地址。然后調(diào)用in 指令,從指定端口取出數(shù)據(jù)即可。3.3.2 流程圖任務(wù)三流程圖如圖3.3.1所示。圖3.3.1任務(wù)三流程圖 3.3.3 源程序程序名47.386STACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSCODE SEGMENT USE16ASSUME SS:STACK,CS:CODESTART:MOV AX,0MOV DS,AXloop1:MOV AH,1;輸入讀入INT 21HCMP AL,'a'JE QU
20、ITSUB AL,30H;字符轉(zhuǎn)化為十進(jìn)制OUT 70H,ALIN AL,71HMOV AH,ALAND AL,0FHSHR AH,4ADD AX,3030HMOV BX,AXmov dl, 0ah mov ah, 2int 21hmov dl, 0dhmov ah, 2int 21hMOV DL,BHMOV AH,2INT 21HMOV DL,BLMOV AH,2INT 21Hmov dl, 0ah ;輸出回車換行mov ah, 2int 21hsub bx,3030Hmov al,bhmov cl,10mul cladd al,blmov ah,0mov cl,16div clmov bh
21、,almov bl,ahadd bx,3030hcmp bl,3ahjae moreput:MOV DL,BHMOV AH,2INT 21HMOV DL,BLMOV AH,2INT 21HMOV DL,'H'MOV AH,2INT 21Hmov dl, 0ah mov ah, 2int 21hmov dl, 0dhmov ah, 2int 21hjmp loop1more:add bl,7jmp putquit:MOV AH,4CHINT 21HCODE ENDSEND START3.3.4 實(shí)驗(yàn)步驟1. 錄入源程序renwu64,編譯,鏈接。2. 執(zhí)行該程序,09,然后觀察屏
22、幕輸出信息,驗(yàn)證是否正確。3.3.5 實(shí)驗(yàn)記錄1.實(shí)驗(yàn)環(huán)境條件:16M內(nèi)存;WINDOWS XP命令行窗口;EDIT.EXE 2.0;MASM.EXE 6.0; LINK.EXE 5.2; TD.EXE 5.0。2.取出的信息按照BCD編碼進(jìn)行壓縮,分為兩部分,分別存儲(chǔ)在AL,AH。比如說(shuō)當(dāng)前小時(shí)信息是19,則1存儲(chǔ)在AH,為0x01,9存儲(chǔ)在AL,為0x09。3.執(zhí)行程序發(fā)現(xiàn)有時(shí)輸出0x0,屏幕上一次輸出當(dāng)前的時(shí)間信息,包括年、月、日、星期、小時(shí)、分鐘、秒。圖3.3.2任務(wù)三運(yùn)行結(jié)果運(yùn)行結(jié)果與實(shí)際時(shí)間相符。3.4 任務(wù)43.4.1 設(shè)計(jì)思想及存儲(chǔ)單元分配在這次的實(shí)驗(yàn)當(dāng)中,我將BUF當(dāng)做學(xué)生信
23、息表,其中每個(gè)字節(jié)的信息都和密碼做循環(huán)亦或,input作為輸入姓名的輸入緩沖區(qū),PWD做密碼對(duì)比,IN_PWD用作密碼的輸入緩沖區(qū)。其中密碼的加密是減去29h再乘以3。為了避免跟蹤措施,采用了計(jì)時(shí)反跟蹤和中斷矢量表修改的兩種反跟蹤措施。將一號(hào)中斷指令和3號(hào)中斷指令的地址更改,使其無(wú)法進(jìn)行單步調(diào)試,之后還有計(jì)時(shí)工具來(lái)避免反跟蹤。3.4.2 流程圖任務(wù)四流程圖如圖3.4.1所示。圖3.4.1任務(wù)四流程圖 3.4.3 源程序程序名422.386stack segment use16 stackdb 200 dup(0)stack endsdata segment use16N EQU 4BUF DB
24、 'z' XOR 'L','h'XOR 'i','a'XOR 'u','o'XOR 'L',6 DUP(0)DB 80 XOR 'L' , 100 XOR 'i', 70 XOR 'u',?DB 'l' XOR 'L','i'XOR 'i','s'XOR 'u','i'XOR 'L',6 DUP
25、(0)DB 50 XOR 'L', 40 XOR 'i', 40 XOR 'u',? DB 'g' XOR 'L','u'XOR 'i','a'XOR 'u','n'XOR 'L','g'XOR 'i',5 DUP(0)DB 85 XOR 'L', 85 XOR 'i', 100 XOR 'u', ?INPUT DB 10DB ?DB 10
26、DUP(0)POIN DW 0CRLF DB 0dh,0ah,'$'FUN1 DB 'Please input the name:$'faild DB 'The student is not exist.','$'succ DB 'find wanted student.$'FUN3 DB 'the average score is :$'FUN4 DB 'the score level is :$'QUIT DB 'quit the program$'q DW 0B
27、1 DB2STRI DW 0,'$'MIMA1 DB 'Please input the password:',0ah,0dh,'$'w dw 0PWD DB 3 XOR 'C' ;密碼串的長(zhǎng)度為3,采用與常數(shù)43H異或的方式編碼成密文 DB ('L' -29H)*3 ;真實(shí)密碼為Bat。采用函數(shù)(X-29H)*3對(duì)保存的密碼進(jìn)行編碼。 DB ('i' -29H)*3 DB ('u' -29H)*3 DB ('L' -29H)*3 DB ('i' -2
28、9H)*3 DB ('u' -29H)*3 DB 0A1H,5FH,0D3H ;用隨機(jī)數(shù)填充密碼區(qū)到6個(gè)字符,防止破解者猜到密碼長(zhǎng)度;IN_PWD DB 7 ;使用者輸入的密碼區(qū),最大長(zhǎng)度6個(gè)字符 DB ? DB 7 DUP(0)OLDINT1 DW 0,0 ;1號(hào)中斷的原中斷矢量(用于中斷矢量表反跟蹤)OLDINT3 DW 0,0 ;3號(hào)中斷的原中斷矢量data endscode segment use16assume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axxor ax,ax ;接管調(diào)試用中斷,中斷矢量表反跟蹤
29、mov es,ax mov ax,es:1*4 ;保存原1號(hào)和3號(hào)中斷矢量 mov OLDINT1,ax mov ax,es:1*4+2 mov OLDINT1+2,ax mov ax,es:3*4 mov OLDINT3,ax mov ax,es:3*4+2 mov OLDINT3+2,ax cli ;設(shè)置新的中斷矢量 mov ax,OFFSET NEWINT mov es:1*4,ax mov es:1*4+2,cs mov es:3*4,ax mov es:3*4+2,cs stilea dx,MIMA1;輸出提示信息mov ah,9int 21hLEA DX,IN_PWD ;輸入密碼字
30、符串 MOV AH,10 INT 21H lea dx,CRLF;輸出回車換行mov ah,9int 21hcli ;計(jì)時(shí)反跟蹤開始 mov ah,2ch int 21h push dx ;保存獲取的秒和百分秒 mov ah,2ch ;獲取第二次秒與百分秒 int 21h sti cmp dx,esp ;計(jì)時(shí)是否相同 pop dx jz PASS1 ;如果計(jì)時(shí)相同,通過(guò)本次計(jì)時(shí)反跟蹤 jmp quit1PASS1: MOVZX CX,IN_PWD+1 MOV SI,0 MOV DL,3 PASS2: MOVZX AX,IN_PWD+2SI ;比較密碼是否相同。把輸入的串變成密文,與保存的密文比
31、較 SUB AX,29H MUL DL CMP AL,PWD+1SI JNZ ERR2 INC SI LOOP PASS2 JMP start1ERR2: mov ebx,OFFSET quit1 ;當(dāng)密碼不等時(shí),通過(guò)地址表計(jì)算出OVER(退出)的位置 jmp word ptr ebx ;指向OVERstart1:mov sp,0lea dx,FUN1;輸出提示信息mov ah,9int 21hlea dx,INPUT ;輸入學(xué)生姓名mov ah,10int 21hlea dx,CRLF;輸出回車換行mov ah,9int 21hlea bp,offset INPUT add bp,2mov
32、dl,ds: byte ptr bp-1cmp ds: byte ptr bp-1,0jestart1cmp ds: byte ptr bp-1,1je judgecmp ds: byte ptr bp-1,1jmp searchjudge: cmp ds:byte ptr bp,byte ptr 'q'je quit1cmp ds:byte ptr bp,byte ptr 'Q'je quit1search: mov bp,2mov si,0mov bx,0movzx ax,dlmov di,0movzx di,dladd di,offset INPUTadd
33、 di,2mov byte ptr ds:di,byte ptr 0loop1:cmp bx,42je failmov dl,0cmp dl,byte ptr BUFbxsije avemov dh,byte ptr BUFbxsiXOR dh,IN_PWD2+sicmp dh,byte ptr INPUTbpsijne add1add si,1cmp si,axje avejmp loop1add1: add bx,14mov si,0jmp loop1fail:lea dx,faild ;輸出提示信息mov ah,9int 21hlea dx,CRLF;輸出回車換行mov ah,9int
34、21hjmp start1ave :MOV POIN,WORD PTR BXlea dx,succ;輸出提示信息mov ah,9int 21hmov ax,0mov dx,0mov bp,offset BUFadd bp,bxadd bp,10add al,byte ptr ds:bpmov si,0XOR al,IN_PWD2+simul B1INC SImov dl,ds:bp+1XOR dl,IN_PWD3+siadd ax,dxmov dl,ds:bp+2XOR dl,IN_PWD4+sisar dl,1add ax,dxcwdmov cx,7idiv cxsal ax,1mov bp
35、+3,axmov ah,1int 21hPRI :CMPBYTE PTR BP+3,90JGESHOWACMPBYTE PTR BP+3,80JGESHOWBCMPBYTE PTR BP+3,70JGESHOWCCMPBYTE PTR BP+3,60JGESHOWDJMPSHOWFSHOWA:MOVDL,41HMOVAH,2INT 21Hlea dx,CRLF;輸出回車換行mov ah,9int 21hJMPstart1SHOWB:MOVDL,42HMOVAH,2INT 21Hlea dx,CRLF;輸出回車換行mov ah,9int 21hJMPstart1SHOWC:MOVDL,43HMO
36、VAH,2INT 21Hlea dx,CRLF;輸出回車換行mov ah,9int 21hJMPstart1SHOWD:MOVDL,44HMOVAH,2INT 21Hlea dx,CRLF;輸出回車換行mov ah,9int 21hJMPstart1SHOWF:MOVDL,46HMOVAH,2INT 21Hlea dx,CRLF;輸出回車換行mov ah,9int 21hJMPstart1NEWINT:iretquit1 : lea dx,QUIT;輸出提示信息mov ah,9int 21hlea dx,CRLF;輸出回車換行mov ah,4chint 21hcode endsend star
37、t3.4.4 實(shí)驗(yàn)步驟1. 錄入源程序47,編譯,鏈接。2. 運(yùn)行程序,測(cè)試程序功能。3.使用TD反匯編程序,測(cè)試反跟蹤是否成功。4.分析思考題。3.4.5 實(shí)驗(yàn)記錄1.實(shí)驗(yàn)環(huán)境條件:16M內(nèi)存;WINDOWS XP命令行窗口;EDIT.EXE 2.0;MASM.EXE 6.0; LINK.EXE 5.2; TD.EXE 5.0。2.運(yùn)行程序,輸入正確密碼,再輸入姓名,觀察其是否正確。觀察如圖3.4.2.圖3.4.2正常運(yùn)行程序3. 運(yùn)行程序,輸入錯(cuò)誤密碼,觀察到程序退出,沒(méi)法進(jìn)行下一步操作,結(jié)果如圖3.4.3所示。圖3.4.3任務(wù)三運(yùn)行結(jié)果4.反匯編程序,試探是否能對(duì)其進(jìn)行跟蹤,跟蹤如圖3.
38、4.4所示。圖3.4.4跟蹤程序失敗分析:當(dāng)程序進(jìn)行單步調(diào)試時(shí),執(zhí)行到修改中斷矢量表的時(shí)候發(fā)生錯(cuò)誤,說(shuō)明反跟蹤措施成功。5.(思考題1)若密碼是用明文存放在數(shù)據(jù)段中的,如何更快地獲取密碼?分析:若是直接用明文存放,用TD將目標(biāo)程序反匯編,可直接觀察主存來(lái)獲取信息,再通過(guò)結(jié)合反匯編代碼所使用的主存地址來(lái)找到存放學(xué)生信息的數(shù)據(jù)區(qū)。6.(思考題2)若學(xué)生姓名和成績(jī)是用明文存放在數(shù)據(jù)段中的,如何更快地獲取成績(jī)?分析:除了用調(diào)試工具在內(nèi)存中去看,還可以將執(zhí)行程序文件用二進(jìn)制編輯工具打開,直接在文件里尋找所定義的學(xué)生姓名及其成績(jī)。7. (思考題3) 如何對(duì)密碼實(shí)現(xiàn)快速的暴力破解?分析:可以設(shè)計(jì)一個(gè)腳本,將
39、可輸入的字符從數(shù)量上從1到16,所有可能的取值都輸入到程序中,使用窮舉的方法來(lái)試探所有的密碼,直到密碼試探成功。3.5 任務(wù)53.5.1 設(shè)計(jì)思想及存儲(chǔ)單元分配盡量觀察出對(duì)方反匯編的代碼中反跟蹤的部分,并使用指定新的IP地址來(lái)跳過(guò)對(duì)方的反跟蹤措施。3.5.2 流程圖無(wú)3.5.3 源程序無(wú)3.5.4 實(shí)驗(yàn)步驟1. 反匯編目標(biāo)程序2.將目標(biāo)程序使用TD進(jìn)行反匯編,觀察其反匯編代碼。3.通過(guò)設(shè)置斷點(diǎn)和使用改變IP的方法來(lái)繞過(guò)對(duì)方的反跟蹤模塊。4.通過(guò)觀察反匯編語(yǔ)句來(lái)找到信息表在主存中的位置,并通過(guò)解譯來(lái)得到自己想要的信息。 5.(思考題5)總結(jié)如何觀察到程序中存在反跟蹤的代碼和如何應(yīng)對(duì)。3.5.5
40、實(shí)驗(yàn)記錄1.實(shí)驗(yàn)環(huán)境條件:16M內(nèi)存;WINDOWS XP命令行窗口;EDIT.EXE 2.0;MASM.EXE 6.0; LINK.EXE 5.2; TD.EXE 5.0。2.將目標(biāo)程序使用TD進(jìn)行反匯編,觀察其反匯編代碼。如圖3.5.1所示。圖3.5.1使用td對(duì)目標(biāo)程序進(jìn)行反匯編3.觀察到對(duì)方的中斷矢量表的反跟蹤模塊,通過(guò)設(shè)置斷點(diǎn)和使用改變IP的方法來(lái)繞過(guò)對(duì)方的反跟蹤模塊。如圖3.5.2所示。圖3.5.2觀察到對(duì)方的中斷矢量表的反跟蹤模塊4. 觀察到對(duì)方的計(jì)時(shí)的反跟蹤模塊,通過(guò)設(shè)置斷點(diǎn)方法來(lái)繞過(guò)對(duì)方的反跟蹤模塊。如圖3.5.3所示。圖3.5.3觀察到對(duì)方的計(jì)時(shí)的反跟蹤模塊5.找到對(duì)方的加密方式,并獲得主存中信息表的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度路面施工環(huán)境保護(hù)合同范本4篇
- 二零二五版跨境電商智能物流系統(tǒng)租賃合同3篇
- 二零二五年度材料買賣合同范本:石油化工材料購(gòu)銷合作協(xié)議書2篇
- 二零二五年度版權(quán)合同管理崗位職責(zé)解析3篇
- 年度全熱風(fēng)載流焊機(jī)戰(zhàn)略市場(chǎng)規(guī)劃報(bào)告
- 二零二五版導(dǎo)游人員國(guó)際交流聘用合同3篇
- 2025年度園林植物病蟲害防治勞務(wù)合同4篇
- 2024版建筑工程施工安全控制合同書一
- 二零二五年度搬家運(yùn)輸貨物貨物包裝材料供應(yīng)合同3篇
- 二零二五年個(gè)人商業(yè)房產(chǎn)抵押擔(dān)保合同樣本3篇
- GB/T 14864-2013實(shí)心聚乙烯絕緣柔軟射頻電纜
- 品牌策劃與推廣-項(xiàng)目5-品牌推廣課件
- 信息學(xué)奧賽-計(jì)算機(jī)基礎(chǔ)知識(shí)(完整版)資料
- 發(fā)煙硫酸(CAS:8014-95-7)理化性質(zhì)及危險(xiǎn)特性表
- 數(shù)字信號(hào)處理(課件)
- 公路自然災(zāi)害防治對(duì)策課件
- 信息簡(jiǎn)報(bào)通用模板
- 火災(zāi)報(bào)警應(yīng)急處置程序流程圖
- 耳鳴中醫(yī)臨床路徑
- 安徽身份證號(hào)碼前6位
- 分子生物學(xué)在動(dòng)物遺傳育種方面的應(yīng)用
評(píng)論
0/150
提交評(píng)論