APP下载

网络空间安全学科下的C语言课程改革探究

2020-12-01吴福生王俊倪明涛

软件导刊 2020年10期
关键词:网络空间安全课程改革

吴福生 王俊 倪明涛

摘 要:C语言课程是计算机专业重要的基础课,也是学习其它高级程序设计语言的基础,具有承上启下的作用。但很多高校教师在讲授C语言时,并没有基于计算机系统结构和汇编语言等课程进行教学,导致C语言教学对学生而言只能达到“知其然”,并没有“知其所以然”。因此,针对网络空间安全学科下的C语言教学,提出将计算机系统结构和汇编语言课程作为C语言前期基础课程的改革思路,从程序语言底层执行过程出发进行C语言课程教学,并对C语言课程教学案例进行分析。

关键词:网络空间安全;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 引言

高级程序设计语言是计算机科学与技术、软件工程和信息工程等工科专业开设的专业必修课和公共基础课,在高校的信息类课程教学中占有重要地位。当前,信息安全引起了人们的高度关注,信息安全的基础教学也得到了前所未有的重视,尤其是高级程序设计语言课程教学显得尤为重要。然而,传统高级程序设计语言课程教学已无法满足如今新形势下对信息安全的要求,如何进行网络空间安全学科下的高级程序设计语言(以C语言程序設计课程为例)课程教学面临挑战。

C语言课程属于信息安全专业的必修课,也是学习其它高级语言的基础,如脚本语言(JavaScript和PHP等)、高级语言(C++和Java等)和Python语言等。很多高校都把C语言课程安排在大学一年级,并采用“理论+实验”的教学模式,课程考核方式为笔试,但这种传统教学模式并没有取得良好的教学效果。C语言课程在整个理工科本科教学中占有重要地位,特别对于网络空间安全专业,更是必不可少的专业基础课程,但学生普遍认为C语言课程难学,因此学习兴趣不高。导致这种情况的原因之一是传统教学方式在讲授C语言程序代码执行时,一般只是针对C语言“面向过程”的特点,仅从程序流程上讲授C语言执行过程。这种教授方法对于一般要求开设高级语言程序设计课程的工科专业是可行的,但对于网络空间安全学科专业的学生则是“只知其然,而不知其所以然”,导致其在后期的逆向工程、漏洞分析和计算机病毒分析等课程学习中或具体实际应用中存在困难。主要原因为:①在学习C语言课程时,未开设计算机体系结构的前期基础课程(例如:计算机组成原理和汇编语言);②教学过程中忽视了对C语言底层执行过程的学习;③教师在课程教学设计中未考虑C语言的特殊性,即C语言是一种过渡性程序设计语言,既可看作低级语言,又可认为是一种高级程序设计语言。

因此,针对目前C语言课程教学中存在的问题,本文对网络空间安全学科下的C语言课程改革进行探究。本文主要创新点为:①把计算机体系结构课程和汇编语言作为C语言教学的前期课程;②在C语言课程教学过程中融入计算机硬件、汇编指令等基础知识;③结合网络空间安全的信息安全规范[1]开展教学活动。

1 相关研究工作

C语言是计算机及其它理工类专业的专业基础课,在高级语言程序设计课程教学中具有重要地位,大多数高校的理工类专业都把C语言课程作为最重要的专业基础课之一。因此,很多学者及教师对高校C语言课程本科教学进行了探究。如文献[2]从计算机专业与非计算机专业两方面考虑C语言课程教学设计,对C语言理论课与实践课的教学改革进行探讨;文献[3]设计了一个C 语言课程教学辅导网站,让学生在课外可随时随地进行C语言课程学习,打破了C语言学习的时空限制问题;文献[4]针对数学本科专业的C语言课程教学,重点分析影响C语言课程教学效果的因素,并提出调整授课内容、改进教学方法以及对考核方式进行改革等对策以提升教学效果;文献[5]提出利用网络平台和雨课堂,把微课与翻转课堂融合到理论与实践教学中,以增强学生的编程能力和创新能力。此外,文献[6]-[10]也对C语言课程改革进行了探讨。

网络空间安全于2015年获批一级学科,其包括《密码学》、《操作系统原理及安全》和《网络安全》等课程, C语言课程也是其中最重要的专业基础课之一。网络空间安全学科的C语言课程教学与传统计算机科学与技术及其它理工科专业有所不同,如果延续传统的C语言课程教学方法,未教授C语言程序代码的底层实现过程,将导致学生无法理解C语言程序代码的实现原理。例如,对于一个简单的C语言程序,如图1所示,传统教学方法是按照C语言程序执行顺序进行教学,如图2所示。

在C语言课程教学中,如果只是基于面向过程的思想讲解C语言程序执行过程,学生无法彻底理解C语言程序执行顺序的本质,在后期学习逆向工程时会感觉很困难。为了加深网络空间安全学科专业学生对C语言的理解,本文对课程安排的时间顺序及相关教学内容进行调整。

2 教学案例设计

以网络空间安全一级学科下信息安全专业本科生的C语言程序设计课程为例,对C语言课程的教学改革进行探究。该专业的前期课程除《计算机导论》外,还有《计算机组成原理》和《汇编语言》等。下面以谭浩强[11]的《C语言程序设计(第二版)》为教材,以函数嵌套调用章节作为教学案例进行分析,并与计算机科学与技术和软件工程等一级学科下的C语言课程教学进行对比。

2.1 传统C语言课程教学

计算机科学与技术和软件工程等一级学科下的C语言课程教学步骤如下:

步骤1:复习函数基本概念。

(1)复习函数调用的一般形式:函数名(实参数列表)。例如:图1程序中的主函数main()调用函数Max_Num(a, b),其中(a, b)为函数Max_Num(a,b)的实参数列表,a、b为函数Max_Num(a, b)的实参。

(2)复习实参与形参数据传递,即实参与形参一一对应传递数据。

(3)复习函数调用方式:①函数语句。例如函数printf();②表达式。例如c=2*max(a,b);③函数参数。例如m=max(a,max(b,c))。

步骤2:引入新课——函数嵌套调用。函数嵌套调用是指在函数调用过程中,又调用另外一个函数。具体调用过程如图3所示。

(1)讲解函数嵌套调用过程。图3表示两层嵌套的情形,其执行过程为:执行main函数中调用a函数的语句时,即转去执行a函数,在a函数中调用b 函数时,又转去执行b函数,b函数执行完毕返回a函数的断点继续执行,a函数执行完毕返回main函数的断点继续执行。

(2)讲解嵌套调用C程序的实例,利用函数嵌套计算(a+b)2。C语言顺序执行与函数嵌套调用过程如图4所示。

一般情况下,传统计算机科学与技术和软件工程等一级学科的C语言嵌套调用课程教学到此结束,并没有从底层讲解函数调用的整个过程。

2.2 改革后的C语言课程教学

基于网络空间安全一级学科下的C语言课程教学,其教学步骤1(复习函数基本概念)与步骤2(講解函数嵌套调用过程及实例)与传统C语言课程教学步骤相同,这里不再赘述,以下重点探讨如何根据C语言底层执行过程,解决C语言函数的嵌套调用问题。

为使学生加深对函数嵌套调用过程的理解,对程序代码底层执行顺序进行讲解,而传统C语言程序教学中并未涉及到该教学环节。在基于Linux操作系统的环境下,利用GDB工具对程序代码(图4的C语言程序)进行反汇编代码调试,具体过程如图5所示。

由图5可知,程序的底层执行顺序为:主函数main通过汇编指令Call调用函数Add,函数Add也通过汇编指令Call调用函数Power,并通过汇编指令Leaveq与retq返回函数。在这种程序嵌套调用过程中,能清楚看到程序跳转的地址空间。例如,从main函数调用Add函数时,汇编Call指令值为0x4005cc,该地址正好是Add的函数地址。

3 教学案例分析

通过对以上C语言程序教学案例的分析可知,从C语言程序执行的底层(汇编语言)深入讲解C语言函数嵌套调用过程,并把《计算机组成原理》和《汇编语言》等课程作为其前期课程,可降低教学难度,也使学生了解C语言函数调用执行过程的本质。在具体教学过程中,不仅教授C语言函数嵌套调用的基本知识,例如通过示例图3解析函数嵌套调用具体过程,而且通过汇编语言执行跳转的基本指令(Call指令、Leave指令和Ret指令等)解析C语言程序底层执行过程(例如图4的 GDB反汇编代码调试),使学生“知其然”,并“知其所以然”,有助于后期逆向工程、漏洞分析和计算机病毒分析等课程的学习以及具体实际应用。

4 结语

没有网络安全就没有国家安全。网络空间安全成为一级学科,充分体现了信息安全的重要性,因此培养系统掌握信息安全领域基本理论与基本技术,具备信息安全科学研究、技术开发和应用服务能力的信息安全专业人才是当务之急。C语言教学在信息安全教学中具有重要地位,因此网络空间安全学科下的C语言教学要求高于一般理工科专业的教学要求。本文对网络空间安全学科下的C语言程序设计课程教学进行了探究,提出将计算机系统结构和汇编语言课程作为C语言教学前期基础课程的改革思路,从程序语言底层执行过程出发进行C语言课程教学,可一定程度上降低教学难度,提升教学效果。虽然教学改革取得了一定成效,但网络空间安全一级学科下的C语言课程教学仍然是一个比较艰巨的任务,未来需要根据实践效果对教学方式作进一步完善。

参考文献:

[1] 教育部高等学校信息安全专业教学指导委员会.  高等学校信息安全专业指导性专业规范[M]. 北京:清华大学出版社,2014.

[2] 李桃迎,陈燕,蒋凡. C 语言程序设计课程实践教学探讨[J]. 科教导刊,2018,26(9):103-104.

[3] 何福保,徐赫迪. C语言重点课程教学辅导网站的分析与设计[J]. 福建电脑,2018, 34(11):137-137.

[4] 叶振. 本科院校数学专业《C 语言程序设计》课程教学探讨[J]. 福建电脑,2018, 34(10):172-172.

[5] 李宇. 基于微课的C语言翻转课堂教学设计与实践[J]. 软件导刊(教育技术),2019,18(4):47-48.

[6] 梁志剑,常力丹,井超,等. 基于全学时实验的程序设计基础课程教学改革[J]. 计算机教育,2018,10(10):150-156.

[7] 熊春荣. “C语言程序设计”课程案例驱动教学模式的研究与实践[J]. 玉林师范学院学报,2018,31(5):119-121.

[8] 王晓华,汪荣贵,杨娟,等. 新工科背景下离散数学为核心的专业基础课程实践教学体系研究[J]. 计算机教育, 2018 (10):146-149.

[9] 于纯妍. 基于新型课堂的C语言程序设计课程教学改革方法[J]. 教育教学论坛,2019 (30):86-87.

[10] 方菲,张大为. 基于微信平台的C语言网络先行混合教学模式[J]. 软件导刊,2019,18 (5): 209-211.

[11] 谭浩强. C程序设计(第二版)[M]. 北京:清华大学出版社,2009.

(责任编辑:黄 健)

猜你喜欢

网络空间安全课程改革
基于开源软件的计算机系统安全课程教学与实践
信息安全、网络安全、网络空间安全初探
中、美、英三国网络空间安全人才机制培养比较研究
“双创”形势下高职财务管理课程改革探索
安全通论