吳福生 王俊 倪明濤
摘 要:C語言課程是計算機專業(yè)重要的基礎(chǔ)課,也是學習其它高級程序設(shè)計語言的基礎(chǔ),具有承上啟下的作用。但很多高校教師在講授C語言時,并沒有基于計算機系統(tǒng)結(jié)構(gòu)和匯編語言等課程進行教學,導(dǎo)致C語言教學對學生而言只能達到“知其然”,并沒有“知其所以然”。因此,針對網(wǎng)絡(luò)空間安全學科下的C語言教學,提出將計算機系統(tǒng)結(jié)構(gòu)和匯編語言課程作為C語言前期基礎(chǔ)課程的改革思路,從程序語言底層執(zhí)行過程出發(fā)進行C語言課程教學,并對C語言課程教學案例進行分析。
關(guān)鍵詞:網(wǎng)絡(luò)空間安全;C語言課程;課程改革
DOI:10. 11907/rjdk. 192098
中圖分類號:TP434文獻標識碼:A 文章編號:1672-7800(2020)010-0244-03
Abstract: The C language course is an important basic course for computer science and a preliminary basic course for learning other high-level programming languages. It has the role of linking up and down. Many college teachers do not teach based on computer system structure and assembly language when teaching C language. C language teaching can only enable student know what the course is about without understanding the principles. In the first-level discipline based on cyberspace security, this paper proposes the computer composition principle and assembly language course as the pre-basic course of C language course. It is proposed to teach the C language courses from the implementation process of the underlying language of the programming language. Finally, the analysis of the teaching examples of C language courses is given.
Key Words: cyberspace security; C language course; curriculum reform
0 引言
高級程序設(shè)計語言是計算機科學與技術(shù)、軟件工程和信息工程等工科專業(yè)開設(shè)的專業(yè)必修課和公共基礎(chǔ)課,在高校的信息類課程教學中占有重要地位。當前,信息安全引起了人們的高度關(guān)注,信息安全的基礎(chǔ)教學也得到了前所未有的重視,尤其是高級程序設(shè)計語言課程教學顯得尤為重要。然而,傳統(tǒng)高級程序設(shè)計語言課程教學已無法滿足如今新形勢下對信息安全的要求,如何進行網(wǎng)絡(luò)空間安全學科下的高級程序設(shè)計語言(以C語言程序設(shè)計課程為例)課程教學面臨挑戰(zhàn)。
C語言課程屬于信息安全專業(yè)的必修課,也是學習其它高級語言的基礎(chǔ),如腳本語言(JavaScript和PHP等)、高級語言(C++和Java等)和Python語言等。很多高校都把C語言課程安排在大學一年級,并采用“理論+實驗”的教學模式,課程考核方式為筆試,但這種傳統(tǒng)教學模式并沒有取得良好的教學效果。C語言課程在整個理工科本科教學中占有重要地位,特別對于網(wǎng)絡(luò)空間安全專業(yè),更是必不可少的專業(yè)基礎(chǔ)課程,但學生普遍認為C語言課程難學,因此學習興趣不高。導(dǎo)致這種情況的原因之一是傳統(tǒng)教學方式在講授C語言程序代碼執(zhí)行時,一般只是針對C語言“面向過程”的特點,僅從程序流程上講授C語言執(zhí)行過程。這種教授方法對于一般要求開設(shè)高級語言程序設(shè)計課程的工科專業(yè)是可行的,但對于網(wǎng)絡(luò)空間安全學科專業(yè)的學生則是“只知其然,而不知其所以然”,導(dǎo)致其在后期的逆向工程、漏洞分析和計算機病毒分析等課程學習中或具體實際應(yīng)用中存在困難。主要原因為:①在學習C語言課程時,未開設(shè)計算機體系結(jié)構(gòu)的前期基礎(chǔ)課程(例如:計算機組成原理和匯編語言);②教學過程中忽視了對C語言底層執(zhí)行過程的學習;③教師在課程教學設(shè)計中未考慮C語言的特殊性,即C語言是一種過渡性程序設(shè)計語言,既可看作低級語言,又可認為是一種高級程序設(shè)計語言。
因此,針對目前C語言課程教學中存在的問題,本文對網(wǎng)絡(luò)空間安全學科下的C語言課程改革進行探究。本文主要創(chuàng)新點為:①把計算機體系結(jié)構(gòu)課程和匯編語言作為C語言教學的前期課程;②在C語言課程教學過程中融入計算機硬件、匯編指令等基礎(chǔ)知識;③結(jié)合網(wǎng)絡(luò)空間安全的信息安全規(guī)范[1]開展教學活動。
1 相關(guān)研究工作
C語言是計算機及其它理工類專業(yè)的專業(yè)基礎(chǔ)課,在高級語言程序設(shè)計課程教學中具有重要地位,大多數(shù)高校的理工類專業(yè)都把C語言課程作為最重要的專業(yè)基礎(chǔ)課之一。因此,很多學者及教師對高校C語言課程本科教學進行了探究。如文獻[2]從計算機專業(yè)與非計算機專業(yè)兩方面考慮C語言課程教學設(shè)計,對C語言理論課與實踐課的教學改革進行探討;文獻[3]設(shè)計了一個C 語言課程教學輔導(dǎo)網(wǎng)站,讓學生在課外可隨時隨地進行C語言課程學習,打破了C語言學習的時空限制問題;文獻[4]針對數(shù)學本科專業(yè)的C語言課程教學,重點分析影響C語言課程教學效果的因素,并提出調(diào)整授課內(nèi)容、改進教學方法以及對考核方式進行改革等對策以提升教學效果;文獻[5]提出利用網(wǎng)絡(luò)平臺和雨課堂,把微課與翻轉(zhuǎn)課堂融合到理論與實踐教學中,以增強學生的編程能力和創(chuàng)新能力。此外,文獻[6]-[10]也對C語言課程改革進行了探討。
網(wǎng)絡(luò)空間安全于2015年獲批一級學科,其包括《密碼學》、《操作系統(tǒng)原理及安全》和《網(wǎng)絡(luò)安全》等課程, C語言課程也是其中最重要的專業(yè)基礎(chǔ)課之一。網(wǎng)絡(luò)空間安全學科的C語言課程教學與傳統(tǒng)計算機科學與技術(shù)及其它理工科專業(yè)有所不同,如果延續(xù)傳統(tǒng)的C語言課程教學方法,未教授C語言程序代碼的底層實現(xiàn)過程,將導(dǎo)致學生無法理解C語言程序代碼的實現(xiàn)原理。例如,對于一個簡單的C語言程序,如圖1所示,傳統(tǒng)教學方法是按照C語言程序執(zhí)行順序進行教學,如圖2所示。
在C語言課程教學中,如果只是基于面向過程的思想講解C語言程序執(zhí)行過程,學生無法徹底理解C語言程序執(zhí)行順序的本質(zhì),在后期學習逆向工程時會感覺很困難。為了加深網(wǎng)絡(luò)空間安全學科專業(yè)學生對C語言的理解,本文對課程安排的時間順序及相關(guān)教學內(nèi)容進行調(diào)整。
2 教學案例設(shè)計
以網(wǎng)絡(luò)空間安全一級學科下信息安全專業(yè)本科生的C語言程序設(shè)計課程為例,對C語言課程的教學改革進行探究。該專業(yè)的前期課程除《計算機導(dǎo)論》外,還有《計算機組成原理》和《匯編語言》等。下面以譚浩強[11]的《C語言程序設(shè)計(第二版)》為教材,以函數(shù)嵌套調(diào)用章節(jié)作為教學案例進行分析,并與計算機科學與技術(shù)和軟件工程等一級學科下的C語言課程教學進行對比。
2.1 傳統(tǒng)C語言課程教學
計算機科學與技術(shù)和軟件工程等一級學科下的C語言課程教學步驟如下:
步驟1:復(fù)習函數(shù)基本概念。
(1)復(fù)習函數(shù)調(diào)用的一般形式:函數(shù)名(實參數(shù)列表)。例如:圖1程序中的主函數(shù)main()調(diào)用函數(shù)Max_Num(a, b),其中(a, b)為函數(shù)Max_Num(a,b)的實參數(shù)列表,a、b為函數(shù)Max_Num(a, b)的實參。
(2)復(fù)習實參與形參數(shù)據(jù)傳遞,即實參與形參一一對應(yīng)傳遞數(shù)據(jù)。
(3)復(fù)習函數(shù)調(diào)用方式:①函數(shù)語句。例如函數(shù)printf();②表達式。例如c=2*max(a,b);③函數(shù)參數(shù)。例如m=max(a,max(b,c))。
步驟2:引入新課——函數(shù)嵌套調(diào)用。函數(shù)嵌套調(diào)用是指在函數(shù)調(diào)用過程中,又調(diào)用另外一個函數(shù)。具體調(diào)用過程如圖3所示。
(1)講解函數(shù)嵌套調(diào)用過程。圖3表示兩層嵌套的情形,其執(zhí)行過程為:執(zhí)行main函數(shù)中調(diào)用a函數(shù)的語句時,即轉(zhuǎn)去執(zhí)行a函數(shù),在a函數(shù)中調(diào)用b 函數(shù)時,又轉(zhuǎn)去執(zhí)行b函數(shù),b函數(shù)執(zhí)行完畢返回a函數(shù)的斷點繼續(xù)執(zhí)行,a函數(shù)執(zhí)行完畢返回main函數(shù)的斷點繼續(xù)執(zhí)行。
(2)講解嵌套調(diào)用C程序的實例,利用函數(shù)嵌套計算(a+b)2。C語言順序執(zhí)行與函數(shù)嵌套調(diào)用過程如圖4所示。
一般情況下,傳統(tǒng)計算機科學與技術(shù)和軟件工程等一級學科的C語言嵌套調(diào)用課程教學到此結(jié)束,并沒有從底層講解函數(shù)調(diào)用的整個過程。
2.2 改革后的C語言課程教學
基于網(wǎng)絡(luò)空間安全一級學科下的C語言課程教學,其教學步驟1(復(fù)習函數(shù)基本概念)與步驟2(講解函數(shù)嵌套調(diào)用過程及實例)與傳統(tǒng)C語言課程教學步驟相同,這里不再贅述,以下重點探討如何根據(jù)C語言底層執(zhí)行過程,解決C語言函數(shù)的嵌套調(diào)用問題。
為使學生加深對函數(shù)嵌套調(diào)用過程的理解,對程序代碼底層執(zhí)行順序進行講解,而傳統(tǒng)C語言程序教學中并未涉及到該教學環(huán)節(jié)。在基于Linux操作系統(tǒng)的環(huán)境下,利用GDB工具對程序代碼(圖4的C語言程序)進行反匯編代碼調(diào)試,具體過程如圖5所示。
由圖5可知,程序的底層執(zhí)行順序為:主函數(shù)main通過匯編指令Call調(diào)用函數(shù)Add,函數(shù)Add也通過匯編指令Call調(diào)用函數(shù)Power,并通過匯編指令Leaveq與retq返回函數(shù)。在這種程序嵌套調(diào)用過程中,能清楚看到程序跳轉(zhuǎn)的地址空間。例如,從main函數(shù)調(diào)用Add函數(shù)時,匯編Call指令值為0x4005cc,該地址正好是Add的函數(shù)地址。
3 教學案例分析
通過對以上C語言程序教學案例的分析可知,從C語言程序執(zhí)行的底層(匯編語言)深入講解C語言函數(shù)嵌套調(diào)用過程,并把《計算機組成原理》和《匯編語言》等課程作為其前期課程,可降低教學難度,也使學生了解C語言函數(shù)調(diào)用執(zhí)行過程的本質(zhì)。在具體教學過程中,不僅教授C語言函數(shù)嵌套調(diào)用的基本知識,例如通過示例圖3解析函數(shù)嵌套調(diào)用具體過程,而且通過匯編語言執(zhí)行跳轉(zhuǎn)的基本指令(Call指令、Leave指令和Ret指令等)解析C語言程序底層執(zhí)行過程(例如圖4的 GDB反匯編代碼調(diào)試),使學生“知其然”,并“知其所以然”,有助于后期逆向工程、漏洞分析和計算機病毒分析等課程的學習以及具體實際應(yīng)用。
4 結(jié)語
沒有網(wǎng)絡(luò)安全就沒有國家安全。網(wǎng)絡(luò)空間安全成為一級學科,充分體現(xiàn)了信息安全的重要性,因此培養(yǎng)系統(tǒng)掌握信息安全領(lǐng)域基本理論與基本技術(shù),具備信息安全科學研究、技術(shù)開發(fā)和應(yīng)用服務(wù)能力的信息安全專業(yè)人才是當務(wù)之急。C語言教學在信息安全教學中具有重要地位,因此網(wǎng)絡(luò)空間安全學科下的C語言教學要求高于一般理工科專業(yè)的教學要求。本文對網(wǎng)絡(luò)空間安全學科下的C語言程序設(shè)計課程教學進行了探究,提出將計算機系統(tǒng)結(jié)構(gòu)和匯編語言課程作為C語言教學前期基礎(chǔ)課程的改革思路,從程序語言底層執(zhí)行過程出發(fā)進行C語言課程教學,可一定程度上降低教學難度,提升教學效果。雖然教學改革取得了一定成效,但網(wǎng)絡(luò)空間安全一級學科下的C語言課程教學仍然是一個比較艱巨的任務(wù),未來需要根據(jù)實踐效果對教學方式作進一步完善。
參考文獻:
[1] 教育部高等學校信息安全專業(yè)教學指導(dǎo)委員會.? 高等學校信息安全專業(yè)指導(dǎo)性專業(yè)規(guī)范[M]. 北京:清華大學出版社,2014.
[2] 李桃迎,陳燕,蔣凡. C 語言程序設(shè)計課程實踐教學探討[J]. 科教導(dǎo)刊,2018,26(9):103-104.
[3] 何福保,徐赫迪. C語言重點課程教學輔導(dǎo)網(wǎng)站的分析與設(shè)計[J]. 福建電腦,2018, 34(11):137-137.
[4] 葉振. 本科院校數(shù)學專業(yè)《C 語言程序設(shè)計》課程教學探討[J]. 福建電腦,2018, 34(10):172-172.
[5] 李宇. 基于微課的C語言翻轉(zhuǎn)課堂教學設(shè)計與實踐[J]. 軟件導(dǎo)刊(教育技術(shù)),2019,18(4):47-48.
[6] 梁志劍,常力丹,井超,等. 基于全學時實驗的程序設(shè)計基礎(chǔ)課程教學改革[J]. 計算機教育,2018,10(10):150-156.
[7] 熊春榮. “C語言程序設(shè)計”課程案例驅(qū)動教學模式的研究與實踐[J]. 玉林師范學院學報,2018,31(5):119-121.
[8] 王曉華,汪榮貴,楊娟,等. 新工科背景下離散數(shù)學為核心的專業(yè)基礎(chǔ)課程實踐教學體系研究[J]. 計算機教育, 2018 (10):146-149.
[9] 于純妍. 基于新型課堂的C語言程序設(shè)計課程教學改革方法[J]. 教育教學論壇,2019 (30):86-87.
[10] 方菲,張大為. 基于微信平臺的C語言網(wǎng)絡(luò)先行混合教學模式[J]. 軟件導(dǎo)刊,2019,18 (5): 209-211.
[11] 譚浩強. C程序設(shè)計(第二版)[M]. 北京:清華大學出版社,2009.
(責任編輯:黃 健)