计算机系统导论实践教程 / 高等学校计算机专业系列教材
¥59.00定价
作者: 鲍培明,苏丰,袁春风
出版时间:2025-04-14
出版社:机械工业出版社
- 机械工业出版社
- 9787111769637
- 1-1
- 547178
- 平装
- 2025-04-14
- 368
内容简介
本书作为主教材《计算机系统导论》配套的程序设计与调试实践教材,内容包括基础级验证性实验和模块级分析性实验。本书中设计的基础级验证性实践项目包括实验系统的安装和工具软件的使用、程序调试命令和指令系统基础相关实验、数据的机器级表示实验、数据的基本运算实验、程序的机器级表示实验;模块级分析性实践项目包括二进制程序分析与逆向工程实验、程序的链接与ELF目标文件实验。本书为《计算机系统导论》主教材提供了系统性的编程调试实践项目,可以作为高等院校计算机专业本科或高职高专学生计算机系统导论课程的教学辅助教材,也可以作为计算机技术人员的参考书。
目录
前 言
随着计算机信息技术的飞速发展,我们见证了从早期多人一机的主机–终端模式,到PC时代的一人一机模式,再到如今的人–机–物互联的智能化大数据并行计算模式。现如今各行各业都离不开计算机信息技术,计算机信息产业对我国现代化战略目标的实现发挥着极其重要的支撑作用。这对计算机专业人才培养提出了更高的要求,传统的计算机专业教学课程体系和教学内容已经远远不能反映现代社会对计算机专业人才的培养要求,计算机专业人才培养也从强调程序设计变为更强调系统设计。这需要我们重新规划教学课程体系,调整教学理念和教学内容,加强系统能力培养,使学生能够深刻理解计算机系统整体的概念,更好地掌握软/硬件协同设计和程序设计技术,从而能够成为满足业界需求的各类计算机专业人才。不管培养计算机系统哪个层面的技术人才,计算机专业教育都要重视学生“系统观”的培养。
机械工业出版社2023年8月出版的主教材《计算机系统导论》(ISBN 978-7-111-73093-4),重点介绍了计算机系统相关的基础性知识。该主教材以高级语言程序的开发和加载执行为主线,将高级语言源程序向可执行目标文件转换过程中涉及的基本概念关联起来,试图使读者建立起完整的计算机系统层次结构框架,初步构建计算机系统中每个抽象层及其相互转换关系,建立高级语言程序、ISA、编译器、汇编器、链接器等系统核心层之间的相互关联,对指令在硬件上的执行过程有一定的认识和了解,从而增强读者在编程调试方面的能力,并为后续“计算机组成原理”“操作系统”“编译原理”等课程的学习打下坚实的基础。
主教材涵盖面广、细节内容较多、篇幅较大,给用书教师和学生带来了一些困难。为了更好地帮助主讲教师用好主教材,也为了学生能更好地理解课程中的核心概念,特别是让学生通过“学中做、做中学”的方式更好地掌握所学的理论知识,提高和增强程序设计和程序调试能力,我们编写了这本实践类辅助教材,为主教材中每一章的内容都设计了配套的实践项目,其主要设计思路和实践内容如下。
第1章为“实验系统的安装和工具软件的使用”。本章包含实验系统的安装和配置,以及常用命令和工具软件的使用等方面的两个实验。实践内容包括从网络上下载虚拟机软件并安装虚拟机、下载和安装Linux操作系统、在Linux系统中配置程序开发和调试环境等操作,以完成实验系统的构建,从而为后续实验准备好调试执行环境,并使学生在实验系统构建过程中体会和理解计算机系统层次结构的基本概念。
第2章为“程序调试初步和指令系统基础”。本章包含程序调试初步、IA-32指令系统基础和在C语言程序中嵌入汇编指令3个实验。通过所设计的实践项目,使学生能基于IA-32+Linux平台,在机器级代码层执行单步调试操作,通过对照C语句和对应机器级代码逐步熟悉IA-32指令系统中的基础内容,如AT&T汇编指令格式、通用寄存器结构、指令基本寻址方式等,从而为后续实验的开展奠定良好的基础。
第3章为“数据的机器级表示实验”。本章包含整型数据的真值与机器数、浮点型数据的真值与机器数、数据的宽度与存放顺序、不同整型数据之间的转换、整型数据和浮点型数据之间的转换等5个实验。通过基于IA-32+Linux平台以及GCC编译驱动程序和gdb调试工具等对C语言程序中数据的机器级表示内容进行实验,使学生更好地理解数据的真值和机器数之间的对应关系,确定机器数所存放的存储单元,从而掌握整型数据和浮点型数据的编码表示方法。
第4章为“数据的基本运算实验”。本章包含整数加减、整数乘、整数除和浮点数运算4个实验。通过基于IA-32+Linux平台以及GCC编译驱动程序和gdb调试工具等对C语言源程序中的整数加、减、乘、除等基本运算和浮点数运算进行实验,使学生更好地理解C语言程序中的运算、机器级代码中的运算指令、基本运算电路三者之间的关系,掌握数据在计算机内部的存储、运算和传送机制,从而掌握计算机系统中的整数运算和浮点数运算的实现方法,进一步熟悉IA-32中的常用指令并更好地掌握指令的基本寻址方式。
第5章为“程序的机器级表示实验”。本章安排了5个实验,实验4和实验5为选做实验。前3个实验主要基于IA-32+Linux平台以及GCC编译驱动程序和gdb调试工具等,对C语言源程序中的函数调用语句、循环结构和选择结构等各类流程控制语句以及各类复杂数据类型的分配和访问等的机器级代码表示和实现进行实验,以帮助学生理解C语言程序在计算机系统中的底层实现机制,从而深刻理解高级语言程序、语言处理工具和环境、操作系统、指令集系统结构(ISA)之间的关联关系。实验4作为基础级验证性实验部分的综合收官实验,通过对C语言程序及其机器级代码中缓冲区溢出漏洞的调试分析,以及利用缓冲区溢出漏洞进行模拟攻击的过程分析,将数据的表示、数据的运算和程序的机器级表示等内容贯穿起来,以进一步巩固对主教材相关内容的理解。实验5为64位架构平台上的实验,需要配置基于x86-64架构的Ubuntu(64位)Linux系统,在此基础上进行x86-64架构机器级表示实验。
第6章为“二进制程序分析与逆向工程实验”。本章与主教材第2~6章的教学内容配套,包含了9个实验,通过对二进制程序的构成与运行逻辑的分析,旨在将理论课程中关于程序的机器级表示的教学内容贯穿起来,加深对其中各重要知识点的理解,并进一步巩固和掌握反汇编、跟踪/调试等常用编程技能。
第7章为“程序链接与ELF目标文件实验”。本章与主教材第7章(程序的链接)的教学内容配套,按照主教材教学内容分阶段设计为以下6个实验:数据与ELF数据节、指令与ELF代码节、符号解析、switch语句与链接、重定位、位置无关代码。通过对一组可重定位目标文件中相关内容的分析和修改,将其链接为可正确运行的程序,从而加深学生对理论课中关于ELF目标文件的基本结构和组成、程序链接过程(如符号解析与重定位)等基础知识和基本概念的理解,并掌握用于链接和目标文件解析等的常用工具软件的
使用。
本书设计的实验中,前五章实验内容属于基础级验证性实验,后两章实验内容属于模块级分析性实验。这两部分实验的配套实验代码可通过出版社的网站或配套数字资源介质获取。模块级分析性实验中面向任课教师的代码可向出版社申请获得。
本书的编写得到了南京大学“计算机系统基础”课程组教师和各届学生的大力支持,同时,国内许多使用《计算机系统基础》和《计算机系统导论》等教材进行教学的教师也提出了宝贵的反馈和改进意见,在此表示衷心的感谢!
由于计算机系统相关的基础理论和技术在不断发展,新的思想、概念、技术和方法不断涌现,加之作者水平有限,在编写中难免存在不当或遗漏之处,恳请同行专家和广大读者对本书的不足之处给予指正,以便在后续的版本中予以改进。
随着计算机信息技术的飞速发展,我们见证了从早期多人一机的主机–终端模式,到PC时代的一人一机模式,再到如今的人–机–物互联的智能化大数据并行计算模式。现如今各行各业都离不开计算机信息技术,计算机信息产业对我国现代化战略目标的实现发挥着极其重要的支撑作用。这对计算机专业人才培养提出了更高的要求,传统的计算机专业教学课程体系和教学内容已经远远不能反映现代社会对计算机专业人才的培养要求,计算机专业人才培养也从强调程序设计变为更强调系统设计。这需要我们重新规划教学课程体系,调整教学理念和教学内容,加强系统能力培养,使学生能够深刻理解计算机系统整体的概念,更好地掌握软/硬件协同设计和程序设计技术,从而能够成为满足业界需求的各类计算机专业人才。不管培养计算机系统哪个层面的技术人才,计算机专业教育都要重视学生“系统观”的培养。
机械工业出版社2023年8月出版的主教材《计算机系统导论》(ISBN 978-7-111-73093-4),重点介绍了计算机系统相关的基础性知识。该主教材以高级语言程序的开发和加载执行为主线,将高级语言源程序向可执行目标文件转换过程中涉及的基本概念关联起来,试图使读者建立起完整的计算机系统层次结构框架,初步构建计算机系统中每个抽象层及其相互转换关系,建立高级语言程序、ISA、编译器、汇编器、链接器等系统核心层之间的相互关联,对指令在硬件上的执行过程有一定的认识和了解,从而增强读者在编程调试方面的能力,并为后续“计算机组成原理”“操作系统”“编译原理”等课程的学习打下坚实的基础。
主教材涵盖面广、细节内容较多、篇幅较大,给用书教师和学生带来了一些困难。为了更好地帮助主讲教师用好主教材,也为了学生能更好地理解课程中的核心概念,特别是让学生通过“学中做、做中学”的方式更好地掌握所学的理论知识,提高和增强程序设计和程序调试能力,我们编写了这本实践类辅助教材,为主教材中每一章的内容都设计了配套的实践项目,其主要设计思路和实践内容如下。
第1章为“实验系统的安装和工具软件的使用”。本章包含实验系统的安装和配置,以及常用命令和工具软件的使用等方面的两个实验。实践内容包括从网络上下载虚拟机软件并安装虚拟机、下载和安装Linux操作系统、在Linux系统中配置程序开发和调试环境等操作,以完成实验系统的构建,从而为后续实验准备好调试执行环境,并使学生在实验系统构建过程中体会和理解计算机系统层次结构的基本概念。
第2章为“程序调试初步和指令系统基础”。本章包含程序调试初步、IA-32指令系统基础和在C语言程序中嵌入汇编指令3个实验。通过所设计的实践项目,使学生能基于IA-32+Linux平台,在机器级代码层执行单步调试操作,通过对照C语句和对应机器级代码逐步熟悉IA-32指令系统中的基础内容,如AT&T汇编指令格式、通用寄存器结构、指令基本寻址方式等,从而为后续实验的开展奠定良好的基础。
第3章为“数据的机器级表示实验”。本章包含整型数据的真值与机器数、浮点型数据的真值与机器数、数据的宽度与存放顺序、不同整型数据之间的转换、整型数据和浮点型数据之间的转换等5个实验。通过基于IA-32+Linux平台以及GCC编译驱动程序和gdb调试工具等对C语言程序中数据的机器级表示内容进行实验,使学生更好地理解数据的真值和机器数之间的对应关系,确定机器数所存放的存储单元,从而掌握整型数据和浮点型数据的编码表示方法。
第4章为“数据的基本运算实验”。本章包含整数加减、整数乘、整数除和浮点数运算4个实验。通过基于IA-32+Linux平台以及GCC编译驱动程序和gdb调试工具等对C语言源程序中的整数加、减、乘、除等基本运算和浮点数运算进行实验,使学生更好地理解C语言程序中的运算、机器级代码中的运算指令、基本运算电路三者之间的关系,掌握数据在计算机内部的存储、运算和传送机制,从而掌握计算机系统中的整数运算和浮点数运算的实现方法,进一步熟悉IA-32中的常用指令并更好地掌握指令的基本寻址方式。
第5章为“程序的机器级表示实验”。本章安排了5个实验,实验4和实验5为选做实验。前3个实验主要基于IA-32+Linux平台以及GCC编译驱动程序和gdb调试工具等,对C语言源程序中的函数调用语句、循环结构和选择结构等各类流程控制语句以及各类复杂数据类型的分配和访问等的机器级代码表示和实现进行实验,以帮助学生理解C语言程序在计算机系统中的底层实现机制,从而深刻理解高级语言程序、语言处理工具和环境、操作系统、指令集系统结构(ISA)之间的关联关系。实验4作为基础级验证性实验部分的综合收官实验,通过对C语言程序及其机器级代码中缓冲区溢出漏洞的调试分析,以及利用缓冲区溢出漏洞进行模拟攻击的过程分析,将数据的表示、数据的运算和程序的机器级表示等内容贯穿起来,以进一步巩固对主教材相关内容的理解。实验5为64位架构平台上的实验,需要配置基于x86-64架构的Ubuntu(64位)Linux系统,在此基础上进行x86-64架构机器级表示实验。
第6章为“二进制程序分析与逆向工程实验”。本章与主教材第2~6章的教学内容配套,包含了9个实验,通过对二进制程序的构成与运行逻辑的分析,旨在将理论课程中关于程序的机器级表示的教学内容贯穿起来,加深对其中各重要知识点的理解,并进一步巩固和掌握反汇编、跟踪/调试等常用编程技能。
第7章为“程序链接与ELF目标文件实验”。本章与主教材第7章(程序的链接)的教学内容配套,按照主教材教学内容分阶段设计为以下6个实验:数据与ELF数据节、指令与ELF代码节、符号解析、switch语句与链接、重定位、位置无关代码。通过对一组可重定位目标文件中相关内容的分析和修改,将其链接为可正确运行的程序,从而加深学生对理论课中关于ELF目标文件的基本结构和组成、程序链接过程(如符号解析与重定位)等基础知识和基本概念的理解,并掌握用于链接和目标文件解析等的常用工具软件的
使用。
本书设计的实验中,前五章实验内容属于基础级验证性实验,后两章实验内容属于模块级分析性实验。这两部分实验的配套实验代码可通过出版社的网站或配套数字资源介质获取。模块级分析性实验中面向任课教师的代码可向出版社申请获得。
本书的编写得到了南京大学“计算机系统基础”课程组教师和各届学生的大力支持,同时,国内许多使用《计算机系统基础》和《计算机系统导论》等教材进行教学的教师也提出了宝贵的反馈和改进意见,在此表示衷心的感谢!
由于计算机系统相关的基础理论和技术在不断发展,新的思想、概念、技术和方法不断涌现,加之作者水平有限,在编写中难免存在不当或遗漏之处,恳请同行专家和广大读者对本书的不足之处给予指正,以便在后续的版本中予以改进。