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