2.1.1 编程及计算机基础课程
目前,网络安全和 CTF 竞赛的内容绝大部分还是与计算机程序密切相关的,因此关于程序编写及运行的知识是进行进一步学习的基础,这些知识主要包括高级程序设计语言、汇编语言、编译原理、计算机系统原理、数据库等。
高级程序设计语言的知识主要出现在程序设计、数据结构、面向对象编程等课程中。要通过学习这些知识,形成分析问题并通过计算机程序解决问题的思维方式,掌握数据类型、基本运算、逻辑控制、数组、结构、指针、函数、对象等基本概念,熟悉各类数据结构的特点及实现,了解面向对象编程的概念,掌握2~3门高级程序设计语言的编程、调试、运行。建议重点关注C/C++语言及Python语言,前者是当前网络安全研究和CTF竞赛命题的主要目标对象,后者便于读者实现快速开发,提高 CTF 竞赛解题和网络安全研究的效率。在掌握C/C++语言和Python语言之后,再学习其他高级程序设计语言就会比较容易。
汇编语言是计算机相关专业的一门重要的专业基础课,通过学习它既可以对计算机系统中的指令执行、存储管理、系统I/O等有一个本质而直观的认识,又可以对高级程序设计语言中的变量组织、地址访问、逻辑控制、函数调用等有一个深入而准确的理解。从网络安全学习和 CTF 竞赛的角度来看,汇编语言的学习尤其要注意以下两点:一是汇编语言与计算机的体系结构和指令集密切相关,因此在学习过程中主要是领会其思想和逻辑,如实模式与保护模式、编址与寻址等,至于具体的指令形式,在需要时查阅相关手册即可;二是学习汇编语言的落脚点始终是网络安全研究,因此要重点关注与网络安全问题关联紧密的寄存器、内存访问、数据处理、跳转方式、函数调用等内容,如何通过汇编语言编程实现复杂的功能则不是学习的重点。汇编语言的学习通常从学习16位8086指令集的汇编入手,推荐阅读王爽的《汇编语言(第4版)》。学习32位x86指令集的汇编则推荐阅读Kip R.Irvine的《汇编语言:基于x86处理器(第7版)》。
编译原理主要介绍高级程序设计语言的源代码是如何成为可以在计算机上运行的二进制程序的,通过学习它可以帮助理解程序的执行过程,提高对计算机系统的总体认识。学习编译原理的难度较大,但与汇编语言类似,读者只需要关注其中与网络安全相关的知识即可,主要包括编译的过程、编译器各组成部分的作用及实现方法、中间代码、目标代码、符号表、运行时存储空间组织等。推荐结合斯坦福大学的在线课程Compilers来进行学习。
计算机系统原理相关的知识除了散见于上述几门课程外,还可能涉及计算机组成原理、计算机体系结构等课程。其中,需要重点了解和掌握的知识有信息的表示及处理、CPU 体系结构、存储器、虚拟内存、链接、异常处理、程序间交互及通信等。推荐阅读Randal E.Bryant和David O'Hallaron的《深入理解计算机系统(第3版)》。
此外,还需要了解一点基本的数据库知识,包括数据库系统的概念、关系数据库、SQL语言、数据库完整性、数据库安全性等。重点是掌握通过SQL语言进行数据的插入、删除、修改、查询等基本操作的方法,要能够灵活运用、举一反三。推荐阅读王珊和萨师煊的《数据库系统概论》。