• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      結(jié)合逆向分析的匯編語(yǔ)言程序設(shè)計(jì)教學(xué)方法

      2016-05-14 20:37:59葛強(qiáng)唐慧豐王磊余文濤王博
      計(jì)算機(jī)教育 2016年6期
      關(guān)鍵詞:結(jié)合教學(xué)

      葛強(qiáng) 唐慧豐 王磊 余文濤 王博

      摘要:針對(duì)目前匯編語(yǔ)言程序設(shè)計(jì)課程教學(xué)中存在的問題,提出將逆向分析引入?yún)R編語(yǔ)言程序設(shè)計(jì)教學(xué)中,通過一個(gè)教學(xué)實(shí)例,闡述結(jié)合逆向分析教學(xué)法的匯編語(yǔ)言程序設(shè)計(jì)教學(xué)過程。

      關(guān)鍵詞:教學(xué);逆向分析;結(jié)合;匯編語(yǔ)言程序設(shè)計(jì)

      引言

      匯編語(yǔ)言程序設(shè)計(jì)是高等院校計(jì)算機(jī)及相近專業(yè)的主要核心課程之一,具有綜合性、實(shí)踐性的特點(diǎn)。匯編語(yǔ)言與計(jì)算機(jī)硬件及操作系統(tǒng)都是緊密相關(guān)的,因此學(xué)好這門課程對(duì)于學(xué)生深入理解計(jì)算機(jī)的工作原理、掌握程序設(shè)計(jì)方法等知識(shí),具有重要作用。

      1匯編語(yǔ)言教學(xué)現(xiàn)狀

      匯編語(yǔ)言以指令系統(tǒng)為核心,分別使用助記符、符號(hào)或符號(hào)地址來(lái)表示操作碼、操作數(shù)或操作地址,是面向機(jī)器的語(yǔ)言。實(shí)踐教學(xué)發(fā)現(xiàn),由于匯編語(yǔ)言語(yǔ)句低級(jí)、概念多且抽象、可讀性差,所以往往使學(xué)生感到枯燥乏味??傮w而言,匯編語(yǔ)言程序設(shè)計(jì)教學(xué)中主要存在如下問題。

      (1)學(xué)生學(xué)習(xí)方法不當(dāng)。與高級(jí)語(yǔ)言具有很好的可讀性和邏輯性不同,匯編語(yǔ)言指令瑣碎,涉及相關(guān)硬件的知識(shí)點(diǎn)太多,而且匯編語(yǔ)言程序設(shè)計(jì)非常重視基礎(chǔ),學(xué)生必須理解基本知識(shí)點(diǎn),才能進(jìn)行后續(xù)知識(shí)的學(xué)習(xí)。如果任課教師引導(dǎo)失誤,學(xué)生沒有理解基礎(chǔ)知識(shí),而是采取死記硬背匯編指令的方法,那么結(jié)果往往導(dǎo)致學(xué)生學(xué)習(xí)效果不佳。

      (2)教師教學(xué)手段存在缺陷。部分教師在教學(xué)中沒有突出重點(diǎn),缺乏與學(xué)生之間的互動(dòng),沒有調(diào)動(dòng)學(xué)生的積極性和主動(dòng)性;部分教師的教學(xué)課件缺乏生動(dòng)性和趣味性,沒有能夠?qū)⒅R(shí)點(diǎn)形象、直觀地呈現(xiàn)出來(lái);同時(shí)匯編語(yǔ)言程序設(shè)計(jì)課程是實(shí)踐性很強(qiáng)的課程,部分教師往往對(duì)這一點(diǎn)認(rèn)識(shí)不足。

      2結(jié)合逆向分析的教學(xué)方法

      針對(duì)目前匯編語(yǔ)言程序設(shè)計(jì)教學(xué)現(xiàn)狀,筆者提出了結(jié)合逆向分析的匯編語(yǔ)言程序設(shè)計(jì)教學(xué)方法,將逆向分析引入?yún)R編語(yǔ)言程序設(shè)計(jì)課堂教學(xué)中,利用逆向分析單步跟蹤,深入觀察硬件細(xì)節(jié)的特點(diǎn),將匯編語(yǔ)言程序設(shè)計(jì)課程中的知識(shí)點(diǎn)進(jìn)行分解細(xì)化,直觀地展示出來(lái),便于學(xué)生理解。

      該教學(xué)方法的具體做法是:針對(duì)某個(gè)知識(shí)點(diǎn),首先講解其原理,然后列舉一個(gè)有助于理解該知識(shí)點(diǎn)的匯編源程序,利用逆向分析軟件分析該源程序的可執(zhí)行文件,通過單步分解程序的執(zhí)行過程,讓學(xué)生觀察寄存器、堆棧以及代碼和數(shù)據(jù)段的變化,使得學(xué)生能夠深入理解該知識(shí)點(diǎn)的底層機(jī)制和內(nèi)部原理。通過逆向分析,幫助學(xué)生總結(jié)該知識(shí)要點(diǎn),加深對(duì)該知識(shí)點(diǎn)的理解,達(dá)到融會(huì)貫通的效果。

      教學(xué)實(shí)踐顯示,結(jié)合逆向分析的教學(xué)方法具有如下優(yōu)點(diǎn):逆向分析可以使匯編語(yǔ)言程序設(shè)計(jì)的課程更加生動(dòng)、直觀,可以提高學(xué)生的學(xué)習(xí)興趣;通過逆向分析觀察匯編語(yǔ)言程序的運(yùn)行機(jī)制,能夠讓學(xué)生深刻理解知識(shí)點(diǎn),達(dá)到事半功倍的效果;通過逆向分析,可加深學(xué)生對(duì)于匯編語(yǔ)言及計(jì)算機(jī)硬件系統(tǒng)的理解。

      3結(jié)合逆向分析的教學(xué)實(shí)踐

      3.1逆向分析方法及工具

      逆向分析即對(duì)目標(biāo)程序進(jìn)行反向推導(dǎo),分析其體系結(jié)構(gòu)以及運(yùn)行過程的細(xì)節(jié)。結(jié)合逆向分析的匯編語(yǔ)言程序設(shè)計(jì)教學(xué)方法,即利用逆向分析工具對(duì)匯編源程序的可執(zhí)行文件進(jìn)行逆向分析,通過對(duì)指令、堆棧、寄存器等的變化情況進(jìn)行分析講解,幫助學(xué)生直觀認(rèn)識(shí)相關(guān)知識(shí)點(diǎn)加深理解。

      我們采用的逆向工具為OllyDbg。OllyDbg是一款具有可視化界面的調(diào)試器,操作簡(jiǎn)單,界面布局清晰,便于初學(xué)者操作。OllyDbg功能強(qiáng)大,在匯編語(yǔ)言程序設(shè)計(jì)教學(xué)過程中,只須讓學(xué)生掌握單步跟蹤,通過單條指令的執(zhí)行,觀察代碼區(qū)、數(shù)據(jù)段、寄存器以及堆棧的變化,了解該條匯編指令的功能,加深理解。

      3.2教學(xué)方案實(shí)例

      3.2.1尋址方式

      存儲(chǔ)器尋址方式主要有三種,即直接尋址、寄存器間接尋址、寄存器相對(duì)尋址,概念比較多,不易掌握。

      教學(xué)過程中首先對(duì)這三種尋址方式的原理進(jìn)行講解。直接尋址,有效地址只有位移量部分,且直接包含在指令代碼中。寄存器間接尋址有效地址存放在寄存器中,通過寄存器間接尋址存儲(chǔ)器操作數(shù)。寄存器相對(duì)尋址的有效地址是寄存器內(nèi)容與位移量之和。

      為了讓學(xué)生更好地理解上述三種尋址方式的本質(zhì)以及區(qū)別,我們構(gòu)造下列三段源程序,并進(jìn)行逆向分析教學(xué),讓學(xué)生直觀地比較這三種尋址方法的不同。

      (1)直接尋址方式

      ;數(shù)據(jù)段

      bvar byte 12h,34h ;定義字節(jié)型變量bvar

      dvar dword 12345678h ;定義雙字型變量dvar

      ;代碼段

      mov eax,dvar

      (2)寄存器間接尋址

      ;代碼段

      mov ebx,offset dvar ;變量dvar的地址傳送至ebx

      mov eaX,[ebx] ;ebx指向的內(nèi)存地址的內(nèi)容傳至eax

      說明;數(shù)據(jù)段與直接尋址方式中定義的數(shù)據(jù)相同。

      (3)寄存器相對(duì)尋址

      :代碼段

      mov ebx,offset bvar :變量bvar的地址傳送至ebx

      mov eax,dword ptr[ebx+2] ;ebx加2得到的有效地址中的內(nèi)容傳送至eax

      說明:數(shù)據(jù)段與直接尋址方式中定義的數(shù)據(jù)相同。

      上述三段源程序定義了相同的變量,代碼段中的指令表示對(duì)數(shù)據(jù)段中定義的變量dvar進(jìn)行尋址,并將dvar的值傳送給寄存器eax。上述三段代碼采取的尋址方式分別為直接尋址方式、寄存器間接尋址方式以及寄存器相對(duì)尋址方式。

      為了讓學(xué)生直觀地感受這三種尋址方式的異同,將這三段代碼分別匯編鏈接生成可執(zhí)行文件,并用OllyDbg加載進(jìn)內(nèi)存,對(duì)每個(gè)可執(zhí)行文件匯編指令單步運(yùn)行,讓學(xué)生注意觀察寄存器eax的值。圖1、圖2、圖3分別為三種尋址方式尋址過程的逆向分析結(jié)果。

      上述三幅圖顯示,尋址結(jié)束后寄存器eax的內(nèi)容均是dvar變量的值12345678h。通過逆向分析可以直觀地看出這三種尋址方式的差異。

      圖1顯示直接尋址的過程:將變量dvar的內(nèi)存地址存儲(chǔ)的內(nèi)容(即變量dvar的值)直接傳送給eax寄存器。變量dvar的內(nèi)存地址包含在指令中。

      圖2顯示寄存器間接尋址的過程:首先將變量dvar的內(nèi)存地址傳送至寄存器ebx,接著將ebx所指向的內(nèi)存地址中存儲(chǔ)的內(nèi)容傳送給寄存器eax。

      圖3顯示寄存器相對(duì)尋址的過程:將變量bvar的內(nèi)存地址傳送至寄存器ebx,將寄存器ebx所指向的內(nèi)存地址加2,并將該內(nèi)存地址中存儲(chǔ)的內(nèi)容傳送至寄存器eax。變量bvar和dvar的存儲(chǔ)空間是按照定義的先后順序一個(gè)接一個(gè)分配的,通過逆向分析可以看出變量dvar的內(nèi)存地址比變量bvar的地址高2個(gè)字節(jié)。所以變量bvar的內(nèi)存地址加2就是變量dvar的內(nèi)存地址。

      3.2.2循環(huán)程序結(jié)構(gòu)

      循環(huán)結(jié)構(gòu)的程序是匯編語(yǔ)言程序設(shè)計(jì)的一個(gè)重點(diǎn),其中循環(huán)控制部分是編程的關(guān)鍵和難點(diǎn)。匯編語(yǔ)言中最主要的循環(huán)指令是LOOP,該指令執(zhí)行的基本原理是使用ecx寄存器作為循環(huán)計(jì)數(shù)器。每執(zhí)行一次循環(huán)體指令,ecx的值減1,并判斷ecx是否為0,如果為0,表示循環(huán)結(jié)束,順序執(zhí)行循環(huán)體的下一條指令,否則返回該循環(huán)體的開始處繼續(xù)執(zhí)行。

      為了讓學(xué)生加深對(duì)LOOP循環(huán)指令的理解,我們構(gòu)造一個(gè)循環(huán)程序,并進(jìn)行逆向分析教學(xué)。該程序?qū)崿F(xiàn)將源字符串srcmsg的內(nèi)容傳送給目的字符串dstmsg。部分代碼如下:

      ;數(shù)據(jù)段

      srcmsg byte‘Hello,Assembly!,0

      dstmsg byte sizeof srcmsg dup(?)

      ;代碼段

      xorebx,ebx

      mov ecx,sizeof srcmsg

      ;ecx=字符串字符個(gè)數(shù)

      copy:

      mov al,srcmsg[ebx] ;取srcmsg字符串一個(gè)字符送至al

      mov dstmsg[ebx],al ;將al傳送至dstmsg

      inc ebx;加1,指向下一個(gè)字符

      loop copy;字符個(gè)數(shù)ecx減去1,并判斷是否為0,不為0,跳至copy處執(zhí)行

      我們將包含上述代碼的程序匯編鏈接生成可執(zhí)行文件,用OllyDbg加載該可執(zhí)行文件,進(jìn)行單步分析,并注意觀察eCX寄存器的變化,如圖4所示。我們可以觀察到當(dāng)執(zhí)行00401014h處的循環(huán)指令時(shí),eex寄存器值減1,同時(shí)返回到地址為00401007h循環(huán)體開始的指令(源程序copy標(biāo)號(hào)處),繼續(xù)執(zhí)行循環(huán)體。當(dāng)ecx寄存器值減少至0,循環(huán)結(jié)束,順序執(zhí)行下一條指令。

      圖5數(shù)據(jù)段逆向分析顯示,變量srcmsg在存儲(chǔ)器的地址為00405000h,變量dstmsg在存儲(chǔ)器的地址為00405010h。程序單步執(zhí)行過程中,可以清楚地觀察到存儲(chǔ)器地址00405000h中的數(shù)據(jù)依次復(fù)制傳送到存儲(chǔ)器地址00405010h的過程。

      為了讓學(xué)生所學(xué)的知識(shí)融會(huì)貫通,增強(qiáng)學(xué)習(xí)興趣,可以將上段代碼中控制循環(huán)的loop.copy指令改為如下圖所示的兩條指令:

      dec ecx;ecx減1

      jnz copy;判斷,ecx的結(jié)果是否為0,如果不為0,則跳轉(zhuǎn)copy處執(zhí)行,否則順序執(zhí)行下條指令。

      程序的其他部分與上段代碼相同。

      將更改后的源程序匯編鏈接生成新的可執(zhí)行文件,并用OllyDbg進(jìn)行逆向分析。逆向分析結(jié)果顯示:?jiǎn)尾綀?zhí)行過程中,寄存器ecx及循環(huán)體執(zhí)行情況以及數(shù)據(jù)段變量的變化情況與原可執(zhí)行文件是相同的。逆向分析的結(jié)果驗(yàn)證了更改后的兩條指令與LOOP指令的功能是一致的。

      在具體教學(xué)過程中,可以讓學(xué)生動(dòng)手實(shí)踐逆向分析過程,增強(qiáng)對(duì)該知識(shí)點(diǎn)的直觀認(rèn)識(shí)。

      3.2.3模塊化程序設(shè)計(jì)

      當(dāng)程序功能復(fù)雜、所有語(yǔ)句寫到一起時(shí),程序結(jié)構(gòu)顯得零亂。由于匯編語(yǔ)言功能簡(jiǎn)單,源程序更顯得冗長(zhǎng),這對(duì)于維護(hù)程序非常不利,所以編寫功能復(fù)雜的程序時(shí),常會(huì)編寫功能相對(duì)獨(dú)立的程序段,作為一個(gè)相對(duì)獨(dú)立的模塊供程序使用,這就是模塊化程序設(shè)計(jì)。

      模塊化程序設(shè)計(jì)是匯編語(yǔ)言程序設(shè)計(jì)課程中的一個(gè)難點(diǎn)。子程序可以實(shí)現(xiàn)源程序的模塊化,簡(jiǎn)化程序結(jié)構(gòu)。為了向?qū)W生清晰講述模塊化程序設(shè)計(jì)的原理,筆者在課堂上構(gòu)造了一個(gè)包含子程序的源程序。下面為該模塊化程序的部分程序片段。

      start:

      mov eax,0

      mov ecx,3

      call sum;調(diào)用子程序sum

      SHill proc;定義子程序sum

      s:addeax,2

      .

      100ps;循環(huán)求和

      ret;子程序返回

      slim endp;子程序結(jié)束

      end start

      該程序是典型的模塊化程序設(shè)計(jì),功能比較簡(jiǎn)單,實(shí)現(xiàn)了求3個(gè)2相加的和。程序的基本結(jié)構(gòu)是子程序sum實(shí)現(xiàn)了求和的循環(huán)過程,主程序通過call surll指令調(diào)用該子程序。

      匯編鏈接上述代碼,并將生成的可執(zhí)行文件用OllyDbg進(jìn)行逆向分析,讓學(xué)生進(jìn)一步觀察主程序調(diào)用子程序的具體過程及堆棧的變化情況。

      通過如圖6所示的逆向分析過程,我們可以看出主程序通過call指令調(diào)用sum子程序的具體執(zhí)行過程:程序?qū)all指令的下條指令的地址(地址為0040101fh)壓入堆棧中,然后跳轉(zhuǎn)到子程序sum的首條指令add eax,2處執(zhí)行。子程序執(zhí)行完畢后,程序由子程序返回主程序。

      為了加強(qiáng)學(xué)生對(duì)主程序調(diào)用子程序的call指令的理解,我們可以讓學(xué)生思考是否可以用其他匯編指令來(lái)替代call指令所包含的兩步操作:將call指令的下條指令壓棧;跳轉(zhuǎn)到子程序。答案是肯定的,我們可以將上段代碼的call指令替換成如下兩條指令:

      push$+7;$為求當(dāng)前指令地址的操作符。因?yàn)椤皃ush$+7”和“jmp sum”指令的機(jī)器碼;長(zhǎng)度為7個(gè)字節(jié),因此push$+7指令將“impsum”的下條指令的地址壓入堆棧。

      jmp sum;跳轉(zhuǎn)到子程序sum

      其他指令不變。將新的源程序匯編鏈接生成可執(zhí)行文件,并用OllyDbg逆向分析,其逆向分析結(jié)果如圖7所示。

      從圖7可以看出,這兩條指令實(shí)現(xiàn)了call指令同樣的操作,分別將指定的指令地址壓人堆棧,并且跳轉(zhuǎn)到子程序開始處。

      子程序返回主程序由ret指令實(shí)現(xiàn)。ret指令同樣可以依據(jù)上述方法更改為由其他指令代替。由于篇幅有限,這里不再展開討論,可以留作課后習(xí)題讓學(xué)生自己更改。

      猜你喜歡
      結(jié)合教學(xué)
      微課讓高中數(shù)學(xué)教學(xué)更高效
      甘肅教育(2020年14期)2020-09-11 07:57:50
      如何讓高中生物教學(xué)變得生動(dòng)有趣
      甘肅教育(2020年12期)2020-04-13 06:25:34
      “自我診斷表”在高中數(shù)學(xué)教學(xué)中的應(yīng)用
      東方教育(2017年19期)2017-12-05 15:14:48
      對(duì)外漢語(yǔ)教學(xué)中“想”和“要”的比較
      舞蹈元素在雜技藝術(shù)發(fā)展中的作用淺析
      戲劇之家(2016年20期)2016-11-09 22:15:06
      中國(guó)工筆人物畫與時(shí)尚題材結(jié)合探究
      淺析社會(huì)主義核心價(jià)值觀視閾下技校生美術(shù)欣賞能力的培養(yǎng)
      職業(yè)(2016年10期)2016-10-20 22:21:12
      探究企業(yè)財(cái)務(wù)會(huì)計(jì)與管理會(huì)計(jì)的結(jié)合
      運(yùn)用多媒體進(jìn)行教學(xué)帶來(lái)的雙面性效果分析
      建筑造價(jià)與施工管理的結(jié)合
      吴忠市| 黑水县| 平泉县| 嘉禾县| 望城县| 年辖:市辖区| 吉木乃县| 包头市| 四会市| 观塘区| 房产| 邢台县| 锡林浩特市| 东乌珠穆沁旗| 涿州市| 昔阳县| 丹阳市| 津南区| 维西| 刚察县| 吴忠市| 平阴县| 乐山市| 昭平县| 全椒县| 高碑店市| 措美县| 鄱阳县| 万全县| 贺州市| 兴和县| 图木舒克市| 永城市| 宁夏| 镇平县| 沙河市| 桐乡市| 聂拉木县| 马龙县| 长丰县| 湟源县|