華科匯編語言程序設(shè)計實驗4_第1頁
華科匯編語言程序設(shè)計實驗4_第2頁
華科匯編語言程序設(shè)計實驗4_第3頁
華科匯編語言程序設(shè)計實驗4_第4頁
華科匯編語言程序設(shè)計實驗4_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課 程 實 驗 報 告課程名稱: 匯編語言程序設(shè)計實驗 實驗名稱: 實驗四 輸入輸出與中斷處理程序設(shè)計 實驗時間: 2017-4-19,14:00-17:30 實驗地點: 南一樓804室74號實驗臺 指導(dǎo)教師: 班鵬新 專業(yè)班級:計算機(jī)科學(xué)與技術(shù)1503班學(xué) 號: U201514558 姓 名: 劉偉光 同組學(xué)生: 余昆 劉智博 報告日期: 2017年 4 月 19日 原創(chuàng)性聲明  本人鄭重聲明:本報告的內(nèi)容由本人獨立完成,有關(guān)觀點、方法、數(shù)據(jù)和文獻(xiàn)等的引用已經(jīng)在文中指出。除文中已經(jīng)注明引用的內(nèi)容外,本報告不包含任何其他個人或集體已經(jīng)公開發(fā)表的作品或成果,不存在剽竊、抄襲行為。特此聲

2、明!學(xué)生簽名: 日期: 2017.4.19 成績評定實驗完成質(zhì)量得分(70分)(實驗步驟清晰詳細(xì)深入,實驗記錄真實完整等)報告撰寫質(zhì)量得分(30分)(報告規(guī)范、完整、通順、詳實等)總成績(100分)指導(dǎo)教師簽字:                     日期:匯 編 語 言 程 序 設(shè) 計 實 驗 報 告目錄1實驗?zāi)康呐c要求22實驗內(nèi)容23實驗過程33.1任務(wù)133.1.1設(shè)計思想及存儲單元分配3

3、3.1.2流程圖33.1.3源程序33.1.4實驗步驟43.1.5實驗記錄43.2任務(wù)263.2.1設(shè)計思想及存儲單元分配63.2.2流程圖63.2.3源程序63.2.4實驗步驟93.2.5實驗記錄93.3任務(wù)3113.3.1設(shè)計思想及存儲單元分配113.3.2流程圖113.3.3源程序113.3.4實驗步驟133.3.5實驗記錄133.4任務(wù)4143.4.1設(shè)計思想及存儲單元分配143.4.2流程圖143.4.3源程序153.4.4實驗步驟223.4.5實驗記錄223.5任務(wù)5233.5.1設(shè)計思想及存儲單元分配233.5.2流程圖233.5.3源程序233.5.4實驗步驟233.5.5實驗

4、記錄234體會26參考文獻(xiàn)271 實驗?zāi)康呐c要求(1) 掌握中斷矢量表的概念;(2) 熟悉I/O訪問,BIOS功能調(diào)用方法;(3) 掌握實方式下中斷處理程序的編制與調(diào)試方法。2 實驗內(nèi)容任務(wù)1:用三種方式獲取中斷類型碼16H對應(yīng)的中斷處理程序的入口地址。要求:首先要進(jìn)入虛擬機(jī)狀態(tài),然后(1) 直接運行調(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:編寫一個接管鍵盤中斷的中斷服務(wù)程序并駐留內(nèi)存,要求在程序返回DOS操作系統(tǒng)后,鍵盤上的小寫字母都變成了大寫字母。要求:(1)在 DOS虛擬機(jī)或DOS窗口下執(zhí)行程序,中斷服務(wù)程序駐留內(nèi)存。(2)在DOS命令行下鍵入小寫字母,屏幕顯示為大寫,鍵入大寫時不變。執(zhí)行TD,在代碼區(qū)輸入指令“mov AX,0”看是否能發(fā)生變化。 (3)選作:另外編寫一個中斷服務(wù)程序的卸載程序,將鍵盤中斷服務(wù)程序恢復(fù)到原來的狀態(tài)任務(wù)3:讀取CMOS內(nèi)指定單元的信息,按照16進(jìn)制形式顯示在屏幕上。要求:(1) 先輸入待讀取的CMOS內(nèi)部單元的地址編號(可以只處理編號小于10的地址

6、單元)。再使用IN/OUT指令,讀取CMOS內(nèi)的指定單元的信息。 (2) 將讀取的信息用16進(jìn)制的形式顯示在屏幕上。若是時間信息,可以人工判斷一下是否正確。3 實驗過程3.1 任務(wù)13.1.1 設(shè)計思想及存儲單元分配用三種方式獲取中斷類型碼10H對應(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 流程圖 無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 實驗步驟1.直接運行td,直接計算16h所調(diào)用的中斷矢量表的位置的段首址和偏移地址,分別是58h和5Ah。在數(shù)據(jù)段中輸入ds:58h,觀察其值。2.將程序41編譯、鏈接,調(diào)試直到?jīng)]有錯誤。運行td 41,在td中單步調(diào)試,觀察es與bx的改變情況;3.將程序42編譯、鏈接,調(diào)試直到?jīng)]有錯誤。運行td 42,在td中單步調(diào)試,觀察寄存器的值。4.總結(jié)計算中斷指令表的規(guī)律和總結(jié)錯誤。3.1.5 實驗記錄1.實驗環(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個字節(jié)為11E0,高2個字節(jié)為F000;觀察如圖3.1.1所示。圖3.1.1 直接觀察td中的主存3.方法二,調(diào)用35號系統(tǒng)功能,在TD內(nèi)觀察到es為11E0,bx為11E0;觀察如圖3.1.2所示。圖3.1.2 調(diào)用35號功能觀察分析:可以直接調(diào)用35號調(diào)用來獲取中斷入口地址。4.方法三,將0:40h開始的低2個字節(jié)移至bx,高2個字節(jié)移至cx,得到cx為F000,bx為11E0;觀察如圖3.1.3所示。圖3.1.3 通過寄存器觀察中斷矢量表5.比

10、較上述三種方法得到的結(jié)果,發(fā)現(xiàn)它們一致,說明以上方法實施得到的結(jié)果準(zhǔn)確無誤。6.(思考題)總結(jié)分析:在計算中斷矢量表位置時,計算第n個中斷指令可用ds:n*4和ds:n*4+2分別得到其位置,值得注意的是在TD中使用的是16進(jìn)制,需要做一些適量轉(zhuǎn)化.。在這次中總結(jié)錯誤為,如果匯編代碼沒有執(zhí)行語句MOV DS,AX的話,其內(nèi)存中保存的值不會是中斷矢量表。錯誤如圖3.1.4所示:圖3.1.4 沒有執(zhí)行MOV DS,AX的主存3.2 任務(wù)23.2.1 設(shè)計思想及存儲單元分配設(shè)計思想:修改鍵盤驅(qū)動中斷程序(int 16h),將中斷矢量表0:58h開始的4個字節(jié)修改為新的中斷程序的偏移地址和段首址,并保

11、存號舊的鍵盤驅(qū)動中斷程序的偏移地址和段首址。在新的中斷程序中,先判斷用戶調(diào)用的是否為鍵盤驅(qū)動中斷程序的讀入鍵盤功能,若不是,則直接調(diào)用舊的鍵盤驅(qū)動中斷程序;若是,則對輸入進(jìn)行處理。實際上我們改變出口參數(shù)中AL的值即是鍵入字符的ASCII碼即可實現(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 實驗步驟1.編譯,鏈接。2. 觀察提示信息,若出錯,則用編輯程序修改錯誤,修改后再重新編譯。3. 在鍵盤鍵入小寫字母和大寫字母,用空格符號分開,觀察輸出。4. (思考題)在DOS命令行下鍵入小寫字母,屏幕顯示為

16、大寫,鍵入大寫時不變。執(zhí)行TD,在代碼區(qū)輸入指令“mov AX,0”看是否能發(fā)生變化。5. (思考題)編寫中斷服務(wù)程序的終止程序,并做觀察。6. (思考題)同時打開另外一個虛擬DOS窗口,鍵盤大小寫是否被替代。3.2.5 實驗記錄1.實驗環(huán)境條件:16M內(nèi)存;WINDOWS XP命令行窗口;EDIT.EXE 2.0;MASM.EXE 6.0; LINK.EXE 5.2; TD.EXE 5.0。 2. 在鍵盤鍵入小寫字母和大寫字母,用空格符號分開,觀察輸出當(dāng)輸入小寫的abyz加空格和大寫的ABYZ,輸出如圖3.2.2所示:圖3.2.2執(zhí)行程序后的輸入顯示3.(思考題)通過編寫代碼發(fā)現(xiàn),將舊的中斷

17、程序的偏移地址與首地址保存下來后,可有有兩種方式調(diào)用舊的中斷程序: Jmp dword ptr old_int;Call dword ptr old_int; 前一種方式,可直接結(jié)束新的(不返回至)中斷程序;后一種方式,可返回至新的中斷程序。4.(可選題)運行卸載程序,觀察卸載結(jié)果,先運行43程序,再運行44程序。輸出如圖3.2.3所示:圖3.2.3運行卸載程序之后觀察大小寫5. (思考題)在DOS命令行下鍵入小寫字母,屏幕顯示為大寫,鍵入大寫時不變。執(zhí)行TD,在代碼區(qū)輸入指令“mov AX,0”,觀察其變化。顯示如圖3.2.4所示:圖3.2.3運行新的中斷程序后再td中輸入“mov AX,0

18、”分析:在DOS虛擬機(jī)上運行了改變?yōu)樾碌闹袛嗵幚沓绦?,在DOS中將小寫變?yōu)榱舜髮懀沁\行了TD,在TD中寫語句小寫并沒有變成大寫,可見中斷處理程序的影響范圍是有限的。6. (思考題)同時打開另外一個虛擬DOS窗口,觀察鍵盤大小寫是否被替代。圖3.2.4觀察鍵盤大小寫是否被替代由觀察可知在新的DOS窗口中,其大小寫沒有改變。7.錯誤總結(jié)一:在卸載程序時寫了一句MOV WORD PTR DS:16H*4+2,F000H,但是編譯器給報出錯誤,分析原因后,是因為以F開頭編譯器會將其視為變量的名字,所以報出錯誤,解決方案是在其前面加0。顯示的錯誤如圖3.2.5圖3.2.5將F000H賦予寄存器值時發(fā)

19、生錯誤3.3 任務(wù)33.3.1 設(shè)計思想及存儲單元分配1號系統(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 實驗步驟1. 錄入源程序renwu64,編譯,鏈接。2. 執(zhí)行該程序,09,然后觀察屏

22、幕輸出信息,驗證是否正確。3.3.5 實驗記錄1.實驗環(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)行壓縮,分為兩部分,分別存儲在AL,AH。比如說當(dāng)前小時信息是19,則1存儲在AH,為0x01,9存儲在AL,為0x09。3.執(zhí)行程序發(fā)現(xiàn)有時輸出0x0,屏幕上一次輸出當(dāng)前的時間信息,包括年、月、日、星期、小時、分鐘、秒。圖3.3.2任務(wù)三運行結(jié)果運行結(jié)果與實際時間相符。3.4 任務(wù)43.4.1 設(shè)計思想及存儲單元分配在這次的實驗當(dāng)中,我將BUF當(dāng)做學(xué)生信

23、息表,其中每個字節(jié)的信息都和密碼做循環(huán)亦或,input作為輸入姓名的輸入緩沖區(qū),PWD做密碼對比,IN_PWD用作密碼的輸入緩沖區(qū)。其中密碼的加密是減去29h再乘以3。為了避免跟蹤措施,采用了計時反跟蹤和中斷矢量表修改的兩種反跟蹤措施。將一號中斷指令和3號中斷指令的地址更改,使其無法進(jìn)行單步調(diào)試,之后還有計時工具來避免反跟蹤。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' ;密碼串的長度為3,采用與常數(shù)43H異或的方式編碼成密文 DB ('L' -29H)*3 ;真實密碼為Bat。采用函數(shù)(X-29H)*3對保存的密碼進(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個字符,防止破解者猜到密碼長度;IN_PWD DB 7 ;使用者輸入的密碼區(qū),最大長度6個字符 DB ? DB 7 DUP(0)OLDINT1 DW 0,0 ;1號中斷的原中斷矢量(用于中斷矢量表反跟蹤)OLDINT3 DW 0,0 ;3號中斷的原中斷矢量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號和3號中斷矢量 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 ;計時反跟蹤開始 mov ah,2ch int 21h push dx ;保存獲取的秒和百分秒 mov ah,2ch ;獲取第二次秒與百分秒 int 21h sti cmp dx,esp ;計時是否相同 pop dx jz PASS1 ;如果計時相同,通過本次計時反跟蹤 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)密碼不等時,通過地址表計算出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 實驗步驟1. 錄入源程序47,編譯,鏈接。2. 運行程序,測試程序功能。3.使用TD反匯編程序,測試反跟蹤是否成功。4.分析思考題。3.4.5 實驗記錄1.實驗環(huán)境條件:16M內(nèi)存;WINDOWS XP命令行窗口;EDIT.EXE 2.0;MASM.EXE 6.0; LINK.EXE 5.2; TD.EXE 5.0。2.運行程序,輸入正確密碼,再輸入姓名,觀察其是否正確。觀察如圖3.4.2.圖3.4.2正常運行程序3. 運行程序,輸入錯誤密碼,觀察到程序退出,沒法進(jìn)行下一步操作,結(jié)果如圖3.4.3所示。圖3.4.3任務(wù)三運行結(jié)果4.反匯編程序,試探是否能對其進(jìn)行跟蹤,跟蹤如圖3.

38、4.4所示。圖3.4.4跟蹤程序失敗分析:當(dāng)程序進(jìn)行單步調(diào)試時,執(zhí)行到修改中斷矢量表的時候發(fā)生錯誤,說明反跟蹤措施成功。5.(思考題1)若密碼是用明文存放在數(shù)據(jù)段中的,如何更快地獲取密碼?分析:若是直接用明文存放,用TD將目標(biāo)程序反匯編,可直接觀察主存來獲取信息,再通過結(jié)合反匯編代碼所使用的主存地址來找到存放學(xué)生信息的數(shù)據(jù)區(qū)。6.(思考題2)若學(xué)生姓名和成績是用明文存放在數(shù)據(jù)段中的,如何更快地獲取成績?分析:除了用調(diào)試工具在內(nèi)存中去看,還可以將執(zhí)行程序文件用二進(jìn)制編輯工具打開,直接在文件里尋找所定義的學(xué)生姓名及其成績。7. (思考題3) 如何對密碼實現(xiàn)快速的暴力破解?分析:可以設(shè)計一個腳本,將

39、可輸入的字符從數(shù)量上從1到16,所有可能的取值都輸入到程序中,使用窮舉的方法來試探所有的密碼,直到密碼試探成功。3.5 任務(wù)53.5.1 設(shè)計思想及存儲單元分配盡量觀察出對方反匯編的代碼中反跟蹤的部分,并使用指定新的IP地址來跳過對方的反跟蹤措施。3.5.2 流程圖無3.5.3 源程序無3.5.4 實驗步驟1. 反匯編目標(biāo)程序2.將目標(biāo)程序使用TD進(jìn)行反匯編,觀察其反匯編代碼。3.通過設(shè)置斷點和使用改變IP的方法來繞過對方的反跟蹤模塊。4.通過觀察反匯編語句來找到信息表在主存中的位置,并通過解譯來得到自己想要的信息。 5.(思考題5)總結(jié)如何觀察到程序中存在反跟蹤的代碼和如何應(yīng)對。3.5.5

40、實驗記錄1.實驗環(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對目標(biāo)程序進(jìn)行反匯編3.觀察到對方的中斷矢量表的反跟蹤模塊,通過設(shè)置斷點和使用改變IP的方法來繞過對方的反跟蹤模塊。如圖3.5.2所示。圖3.5.2觀察到對方的中斷矢量表的反跟蹤模塊4. 觀察到對方的計時的反跟蹤模塊,通過設(shè)置斷點方法來繞過對方的反跟蹤模塊。如圖3.5.3所示。圖3.5.3觀察到對方的計時的反跟蹤模塊5.找到對方的加密方式,并獲得主存中信息表的

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論