華科匯編語言程序設(shè)計(jì)實(shí)驗(yàn)_第1頁
華科匯編語言程序設(shè)計(jì)實(shí)驗(yàn)_第2頁
華科匯編語言程序設(shè)計(jì)實(shí)驗(yàn)_第3頁
華科匯編語言程序設(shè)計(jì)實(shí)驗(yàn)_第4頁
華科匯編語言程序設(shè)計(jì)實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課 程 實(shí) 驗(yàn) 報(bào) 告課程名稱: 匯編語言程序設(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): U 姓 名: 劉偉光 同組學(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ā)表的作品或成果,不存在剽竊、抄襲行為。特此聲明!學(xué)生簽名: 日期: 201

2、7.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)教師簽字: 日期:目錄1實(shí)驗(yàn)?zāi)康呐c要求22實(shí)驗(yàn)內(nèi)容23實(shí)驗(yàn)過程33.1任務(wù)133.1.1設(shè)計(jì)思想及存儲(chǔ)單元分配33.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、.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)記錄234體會(huì)26參考文獻(xiàn)271 實(shí)驗(yàn)?zāi)康呐c要求(1) 掌握中斷矢量表的概念;(2) 熟悉I/O訪問,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

4、.EXE),觀察中斷矢量表中的信息。(2) 編寫程序,用16H功能調(diào)用方式獲取(16H的使用可查閱教材附錄),觀察功能調(diào)用相應(yīng)的出口參數(shù)與“(1)”看到的結(jié)果是否相同 (使用TD觀看出口參數(shù)即可)。(3) 編寫程序,直接讀取相應(yīng)內(nèi)存單元,觀察讀到的數(shù)據(jù)與“(1)”看到的結(jié)果是否相同 (使用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,在代碼

5、區(qū)輸入指令“mov AX,0”看是否能發(fā)生變化。 (3)選作:另外編寫一個(gè)中斷服務(wù)程序的卸載程序,將鍵盤中斷服務(wù)程序恢復(fù)到原來的狀態(tài)任務(wù)3:讀取CMOS內(nèi)指定單元的信息,按照16進(jìn)制形式顯示在屏幕上。要求:(1) 先輸入待讀取的CMOS內(nèi)部單元的地址編號(hào)(可以只處理編號(hào)小于10的地址單元)。再使用IN/OUT指令,讀取CMOS內(nèi)的指定單元的信息。 (2) 將讀取的信息用16進(jìn)制的形式顯示在屏幕上。若是時(shí)間信息,可以人工判斷一下是否正確。3 實(shí)驗(yàn)過程3.1 任務(wù)13.1.1 設(shè)計(jì)思想及存儲(chǔ)單元分配用三種方式獲取中斷類型碼10H對(duì)應(yīng)的中斷處理程序的入口地址。1.直接在td中觀察指定ds:58H中的

6、值和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 DUP(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 SEGME

7、NT 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 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 4

8、1,在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 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為11

9、E0;觀察如圖3.1.2所示。圖3.1.2 調(diào)用35號(hào)功能觀察分析:可以直接調(diào)用35號(hào)調(diào)用來獲取中斷入口地址。4.方法三,將0:40h開始的低2個(gè)字節(jié)移至bx,高2個(gè)字節(jié)移至cx,得到cx為F000,bx為11E0;觀察如圖3.1.3所示。圖3.1.3 通過寄存器觀察中斷矢量表5.比較上述三種方法得到的結(jié)果,發(fā)現(xiàn)它們一致,說明以上方法實(shí)施得到的結(jié)果準(zhǔn)確無誤。6.(思考題)總結(jié)分析:在計(jì)算中斷矢量表位置時(shí),計(jì)算第n個(gè)中斷指令可用ds:n*4和ds:n*4+2分別得到其位置,值得注意的是在TD中使用的是16進(jìn)制,需要做一些適量轉(zhuǎn)化.。在這次中總結(jié)錯(cuò)誤為,如果匯編代碼沒有執(zhí)行語句MOV DS,AX的

10、話,其內(nèi)存中保存的值不會(huì)是中斷矢量表。錯(cuò)誤如圖3.1.4所示:圖3.1.4 沒有執(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é)修改為新的中斷程序的偏移地址和段首址,并保存號(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

11、流程圖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,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,

12、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:16H*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)

13、STACK ENDS END START程序名44卸載中斷指令.386DATA SEGMENT USE16DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,SS:STACKOLD_INT DW ?,?NEW16H:CMP AH,00H JE ATB 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:

14、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: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

15、 200 DUP(0)STACK ENDS END START3.2.4 實(shí)驗(yàn)步驟1.編譯,鏈接。2. 觀察提示信息,若出錯(cuò),則用編輯程序修改錯(cuò)誤,修改后再重新編譯。3. 在鍵盤鍵入小寫字母和大寫字母,用空格符號(hào)分開,觀察輸出。4. (思考題)在DOS命令行下鍵入小寫字母,屏幕顯示為大寫,鍵入大寫時(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

16、;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.(思考題)通過編寫代碼發(fā)現(xiàn),將舊的中斷程序的偏移地址與首地址保存下來后,可有有兩種方式調(diào)用舊的中斷程序: Jmp dword ptr old_int;Call dword ptr old_int; 前一種方式,可直接結(jié)束新的(不返回至)中斷程序;后一種方式,可返回至新的中斷程序。4.(可選題)運(yùn)行卸載程序,觀察卸載結(jié)果,先運(yùn)行43程序,再運(yùn)行44程序。

17、輸出如圖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”分析:在DOS虛擬機(jī)上運(yùn)行了改變?yōu)樾碌闹袛嗵幚沓绦?,在DOS中將小寫變?yōu)榱舜髮?,但是運(yùn)行了TD,在TD中寫語句小寫并沒有變成大寫,可見中斷處理程序的影響范圍是有限的。6. (思考題)同時(shí)打開另外一個(gè)虛擬DOS窗口,觀察鍵盤大小寫是否被替代。圖3.2.4觀察鍵盤大小寫是否被替代由觀察可知在新的DOS窗口中,其大小寫

18、沒有改變。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ā)生錯(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

19、 STACKDB 200 DUP(0)STACK ENDSCODE SEGMENT USE16ASSUME SS:STACK,CS:CODESTART:MOV AX,0MOV DS,AXloop1:MOV AH,1;輸入讀入INT 21HCMP AL,aJE QUITSUB 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 21HM

20、OV 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,almov bl,ahadd bx,3030hcmp bl,3ahjae moreput:MOV DL,BHMOV AH,2INT 21HMOV DL,BLMOV AH,2INT 21HMOV DL,HMOV AH,2INT 21Hmov dl, 0ah mov ah, 2int 21hmov dl, 0dhmov ah, 2int

21、 21hjmp loop1more:add bl,7jmp putquit:MOV AH,4CHINT 21HCODE ENDSEND START3.3.4 實(shí)驗(yàn)步驟1. 錄入源程序renwu64,編譯,鏈接。2. 執(zhí)行該程序,09,然后觀察屏幕輸出信息,驗(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。比如說當(dāng)前小時(shí)信息是19,則1存儲(chǔ)在AH,為0x01,9存儲(chǔ)在AL,為0

22、x09。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é)生信息表,其中每個(gè)字節(jié)的信息都和密碼做循環(huán)亦或,input作為輸入姓名的輸入緩沖區(qū),PWD做密碼對(duì)比,IN_PWD用作密碼的輸入緩沖區(qū)。其中密碼的加密是減去29h再乘以3。為了避免跟蹤措施,采用了計(jì)時(shí)反跟蹤和中斷矢量表修改的兩種反跟蹤措施。將一號(hào)中斷指令和3號(hào)中斷指令的地址更改,使其無法進(jìn)行單步調(diào)試,之后還有計(jì)時(shí)工具來避免反跟蹤。3.4.2 流程圖任務(wù)四流程

23、圖如圖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 z XOR L,hXOR i,aXOR u,oXOR L,6 DUP(0)DB 80 XOR L , 100 XOR i, 70 XOR u,?DB l XOR L,iXOR i,sXOR u,iXOR L,6 DUP(0)DB 50 XOR L, 40 XOR i, 40 XOR u,? DB g XOR L,uXOR i,aXOR u,nXOR L

24、,gXOR i,5 DUP(0)DB 85 XOR L, 85 XOR i, 100 XOR u, ?INPUT DB 10DB ?DB 10 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 0B1 DB2STR

25、I 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 -29H)*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è)字符 D

26、B ? 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)試用中斷,中斷矢量表反跟蹤 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 OLDI

27、NT3,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 ;輸入密碼字符串 MOV AH,10 INT 21H lea dx,CRLF;輸出回車換行mov ah,9int 21hcli ;計(jì)時(shí)反跟蹤開始 mov ah,2ch int 21h push dx ;保存獲取的秒和百分秒 mo

28、v ah,2ch ;獲取第二次秒與百分秒 int 21h sti cmp dx,esp ;計(jì)時(shí)是否相同 pop dx jz PASS1 ;如果計(jì)時(shí)相同,通過本次計(jì)時(shí)反跟蹤 jmp quit1PASS1: MOVZX CX,IN_PWD+1 MOV SI,0 MOV DL,3 PASS2: MOVZX AX,IN_PWD+2SI ;比較密碼是否相同。把輸入的串變成密文,與保存的密文比較 SUB AX,29H MUL DL CMP AL,PWD+1SI JNZ ERR2 INC SI LOOP PASS2 JMP start1ERR2: mov ebx,OFFSET quit1 ;當(dāng)密碼不等時(shí),通

29、過地址表計(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 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

30、 searchjudge: cmp ds:byte ptr bp,byte ptr qje quit1cmp ds:byte ptr bp,byte ptr Qje quit1search: mov bp,2mov si,0mov bx,0movzx ax,dlmov di,0movzx di,dladd di,offset INPUTadd 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_PW

31、D2+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 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

32、,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+3,axmov ah,1int 21hPRI :CMPBYTE PTR BP+3,90JGESHOWACMPBYTE PTR BP+3,80JGESHOWBCMPBYTE PTR BP+3,70JGESHOWCCMPBYTE PTR BP+3,60JGE

33、SHOWDJMPSHOWFSHOWA:MOVDL,41HMOVAH,2INT 21Hlea dx,CRLF;輸出回車換行mov ah,9int 21hJMPstart1SHOWB:MOVDL,42HMOVAH,2INT 21Hlea dx,CRLF;輸出回車換行mov ah,9int 21hJMPstart1SHOWC:MOVDL,43HMOVAH,2INT 21Hlea dx,CRLF;輸出回車換行mov ah,9int 21hJMPstart1SHOWD:MOVDL,44HMOVAH,2INT 21Hlea dx,CRLF;輸出回車換行mov ah,9int 21hJMPstart1SHO

34、WF: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 start3.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;M

35、ASM.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ò)誤密碼,觀察到程序退出,沒法進(jìn)行下一步操作,結(jié)果如圖3.4.3所示。圖3.4.3任務(wù)三運(yùn)行結(jié)果4.反匯編程序,試探是否能對(duì)其進(jìn)行跟蹤,跟蹤如圖3.4.4所示。圖3.4.4跟蹤程序失敗分析:當(dāng)程序進(jìn)行單步調(diào)試時(shí),執(zhí)行到修改中斷矢量表的時(shí)候發(fā)生錯(cuò)誤,說明反跟蹤措施成功。5.(思考題1)若密碼是用明文存放在數(shù)據(jù)段中的,如何更快地獲取密碼?分析:若是直接用明文存放,用TD將目標(biāo)程序反匯編,可直接觀察主存來獲

36、取信息,再通過結(jié)合反匯編代碼所使用的主存地址來找到存放學(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è)腳本,將可輸入的字符從數(shù)量上從1到16,所有可能的取值都輸入到程序中,使用窮舉的方法來試探所有的密碼,直到密碼試探成功。3.5 任務(wù)53.5.1 設(shè)計(jì)思想及存儲(chǔ)單元分配盡量觀察出對(duì)方反匯編的代碼中反跟蹤的部分,并使用指定新的IP地址來跳過對(duì)方的反跟蹤措施。3.5.

37、2 流程圖無3.5.3 源程序無3.5.4 實(shí)驗(yàn)步驟1. 反匯編目標(biāo)程序2.將目標(biāo)程序使用TD進(jìn)行反匯編,觀察其反匯編代碼。3.通過設(shè)置斷點(diǎn)和使用改變IP的方法來繞過對(duì)方的反跟蹤模塊。4.通過觀察反匯編語句來找到信息表在主存中的位置,并通過解譯來得到自己想要的信息。 5.(思考題5)總結(jié)如何觀察到程序中存在反跟蹤的代碼和如何應(yīng)對(duì)。3.5.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.將目標(biāo)程序使用TD進(jìn)行反匯編,觀察其反匯編代碼。如圖3.5.1所示。圖3.5.1使用td對(duì)目標(biāo)程序進(jìn)行反匯編3.觀察到對(duì)方的中斷矢量表的反跟蹤模塊,通過設(shè)置斷點(diǎn)和使用改變IP的方法來繞過對(duì)方的反跟蹤模塊。如圖3.5.2所示。圖3.5.2觀察到對(duì)方的中斷矢量表的反跟蹤模塊4. 觀察到對(duì)方的計(jì)時(shí)的反跟蹤模塊,通過設(shè)置斷點(diǎn)方法來繞過對(duì)方的反跟蹤模塊。如圖3.5.3所示。圖3.5.3觀察到對(duì)方的計(jì)時(shí)的反跟蹤模塊5.找到對(duì)方的加密方式,并獲得主存中信息表的地址位置。如圖3.5.4所示。圖3.5.4任務(wù)三運(yùn)行結(jié)果分析:由觀察反匯編代碼得知,從IP地址為0098之后的兩句知道,其對(duì)密碼的加密為先將

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論