新書推薦:

《
美国军事战略研究
》
售價:NT$
857

《
一对一沟通
》
售價:NT$
561

《
南海:历史与现实
》
售價:NT$
704

《
变局与变奏:两次全球化与中国复兴
》
售價:NT$
653

《
沉默的皖北:明清国家治理与地方社会(精)
》
售價:NT$
347

《
国画牡丹 La Magnifique pivoine
》
售價:NT$
163

《
20世纪物理学(第1卷)
》
售價:NT$
857

《
虚无主义与形而上学
》
售價:NT$
500
|
| 編輯推薦: |
本书作为《计算机系统:基于x86+Linux平台》的配套实践教材,设计了基础级验证、模块级分析、系统级设计和高阶综合编程与分析4个实践项目。基础级验证实践项目包括实验系统的安装和工具软件使用、程序调试命令和指令系统基础、数据的机器级表示、数据的基本运算、程序的机器级表示等方面的实验;模块级分析实践项目包括二进制程序分析与逆向工程、缓冲区溢出攻击、程序链接与ELF目标文件等方面的实验;系统级设计实践项目通过C语言编程设计实现一个功能完备但简化的x86模拟器;高阶综合编程与分析实践项目包括堆栈的使用及堆分配器的实现、程序正确性与程序性能优化、网络编程与并发编程等方面的实验。
本书特色 基于Linux系统程序开发与调试环境进行实验。书中提供了基于开源操作系统Linux的程序开发与调试环境的安装和配置方法,简要介绍了各类常用命令和工具软件的功能及使用方式,并设置了具体的练手实验,有利于初学者尽快掌握基于Linux系统的程序开发和调试基本方法。 注重高级语言程序与机器级代码关联,强化代码逆向工程能力。书中所有基础级验证实验都在文本编辑器窗口中显示高级语言程序语句及其对应的指令序列,并给出了通过
|
| 內容簡介: |
本书作为主教材《计算机系统:基于x86+Linux平台》配套的程序调试分析及模拟器设计实践教材,设计了基础级验证、模块级分析、系统级设计和高阶综合编程与分析4个级别的实践项目。基础级验证实践项目包括实验系统的安装和工具软件的使用、程序调试命令和指令系统基础、数据的机器级表示、数据的基本运算、程序的机器级表示等方面的实验;模块级分析实践项目包括二进制程序分析与逆向工程、缓冲区溢出攻击、程序链接与ELF目标文件等方面的实验;系统级设计实践项目通过C语言编程设计实现一个功能完备但简化的x86模拟器;高阶综合编程与分析实践项目包括堆栈的使用及堆分配器的实现、程序正确性与程序性能优化、网络编程与并发编程等方面的实验。 本书可以作为高等院校计算机专业本科或高职高专学生计算机系统基础类课程的教学辅助教材,也可以作为计算机技术人员的参考书。
|
| 關於作者: |
苏丰 现任南京大学计算机学院副教授。承担“计算机系统基础”“计算机网络”等课程的教学工作,教育部“101计划”计算机系统导论课程及虚拟教研室建设牵头单位主要成员,主持教育部产学合作协同育人项目“计算机系统导论编程与调试实践”,作为主编之一编写出版《计算机系统导论实践教程》。研究领域为多媒体计算和计算机视觉,主持或参与承担多项国家和江苏省自然科学基金项目,发表科研论文50余篇。获教育部自然科学奖二等奖一项、江苏省教学成果奖二等奖一项,参与主讲的“计算机系统基础”课程获选江苏省线下一流课程。 汪亮 现任南京大学计算机学院、计算机软件新技术全国重点实验室副教授,博士生导师。主要从事软件方法学、群体智能以及计算机教育相关研究工作。主持国家自然科学基金青年项目、面上项目,参与科技创新2030“新一代人工智能”重大项目等多项国家级项目。2024年度南京市中青年拔尖人才、微软学者、南京大学“十百千”百层次课程青年教师代表,获得2019年度南京大学优秀教学团队奖、2017年度江苏省教学成果二等奖、2020年度南京大学魅力导师奖、2021年度和2023年度南京大学计算机学院本科毕业生“我心目中的好课程”等校级和省部级奖项。发表教育和科研论文40余篇,获得发明专利授权10余项。 刘杰 现任南京大学计算机学院助理研究员,获得南京大学计算机学院本科、硕士和博士学位。目前承担“计算机系统基础”课程教学工作,主要负责该课程综合实验。研究方向为计算机视觉、图像视频的复原与增强等。主持国家自然科学基金青年项目和江苏省自然科学基金青年项目,作为骨干参与国家重点研发项目。以第一作者或通讯作者在CVPR、ICCV、ECCV、ACM MM、AAAI、IJCAI等高水平会议上发表论文十余篇,荣获2020年ECCV高效图像超分辨率挑战赛冠军。 王慧妍 现任南京大学软件学院助理教授。承担“计算机系统基础”课程教学三年,主要负责该课程综合实验。主要研究方向为智能化软件工程、泛在操作系统数据保障以及软件辅助工具链研究等。在TSE、ICSE、ESEC/FSE、ISSRE等国内外优秀期刊或会议上发表学术论文10余篇,获2023年度江苏省计算机学会优秀博士学位论文奖。担任ICSE 2025、SANER 2024、ASE 2023等会议程序委员会成员与TOSEM、TSE等国际期刊审稿专家。主持国家自然科学基金青年项目与江苏省青年基金项目,参与国家重点研发计划课题与自然科学基金重点项目等。 朱光辉 南京大学计算机学院特聘研究员、助理教授,江苏省计算机学会优博,江苏省“双创博士”,华为“难题揭榜”火花奖获得者,英特尔中国学术英才计划荣誉学者,教育部-华为“智能基座”先锋教师、产教融合协同育人基地优秀课件奖励计划获得者,南京大学“师德师风”先进团队核心成员。长期从事“计算机系统基础”“大数据处理综合实验”“智能计算系统”等系统类课程教学工作,作为主编之一编写出版“101计划”核心教材和江苏“十四五”普通高等教育本科省级规划教材——《计算机系统:基于x86+Linux平台》。研究方向为大数据与智能计算,在国内外著名会议/期刊发表高水平论文30余篇,主持国家自然科学基金项目、江苏省自然科学基金项目、江苏省科技厅重点研发计划课题、之江实验室开放课题、教育部产学合作协同育人项目以及企业横向合作项目多项,研究成果在国际人工智能自动化AI建模大赛中6次获得前三名,并荣获第五届中国“互联网+”创新创业大赛全国金奖,相关技术已落地应用于华为、奇虎360等IT企业。
|
| 目錄:
|
目 录 出版说明 前言 第一部分 基础级验证实验 第1章 实验系统的安装和工具软件 的使用 2 实验1 实验系统的安装和配置 2 实验2 常用命令和工具软件的使用 16 第2章 程序调试命令和指令系统基础 25 实验1 程序调试命令 25 实验2 IA-32指令系统基础 30 *实验3 在C程序中嵌入汇编指令 37 第3章 数据的机器级表示实验 45 实验1 整型数据的真值与机器数 45 实验2 浮点型数据的真值与机器数 50 实验3 数据的宽度与存放顺序 57 实验4 不同整型数据之间的转换 62 实验5 整型数据与浮点型数据之间 的转换 70 第4章 数据的基本运算实验 76 实验1 整数加减运算 76 实验2 整数乘运算 85 实验3 整数除运算 92 实验4 浮点数运算 101 第5章 程序的机器级表示实验 109 实验1 过程调用的实现和栈帧结构 109 实验2 流程控制语句的实现 119 实验3 复杂数据类型的分配和访问 127 *实验4 缓冲区溢出攻击 133 *实验5 x86-64架构中程序的机器级表示 150 第二部分 模块级分析实验 第6章 二进制程序分析与逆向工程 160 实验1 字符串比较 161 实验2 浮点数的表示 164 实验3 循环控制语句 167 实验4 选择–分支控制语句 171 实验5 过程的递归调用 175 实验6 数组类型变量的处理 180 实验7 指针类型变量的处理 186 实验8 结构体类型变量与链表的处理 194 第7章 缓冲区溢出攻击 202 实验1 获得对程序的控制 206 实验2 植入攻击代码 211 实验3 模拟过程调用 217 实验4 应对栈地址随机化 224 实验5 ROP攻击 232 第8章 程序链接与ELF目标文件 241 实验1 数据与ELF数据节 243 实验2 指令与ELF代码节 248 实验3 符号解析 256 实验4 switch语句与链接 260 实验5 重定位 269 实验6 位置无关代码 286 第三部分 系统级设计实验 第9章 实验工具和实验环境设置 302 9.1 方案1:下载并运行Docker镜像 302 9.2 方案2:导入虚拟机 303 9.3 方案3:安装并配置虚拟机 303 9.4 浏览框架代码 305 9.5 线上资源 306 第10章 数据表示和运算的模拟 307 10.1 PA1–1通用寄存器和主存的模拟 307 10.2 PA1–2整数的表示和运算 310 10.3 PA1–3浮点数的表示和运算 313 第11章 程序加载执行的模拟 319 11.1 PA2–1指令解码与执行 319 11.2 PA2–2 Kernel加载ELF文件 333 第12章 存储系统的模拟 338 12.1 PA3–1高速缓存的模拟 338 12.2 PA3–2实现分段机制 340 12.3 PA3–3实现分页机制 346 第13章 异常/中断与I/O子系统 的模拟 351 13.1 PA4–1异常和中断的处理 351 13.2 PA4–2外设与I/O处理 356 *13.3 PA4–3可选任务:游戏移植 361 第四部分 高阶综合编程与分析实验 第14章 堆栈的使用及堆分配器 的实现 366 *实验1 堆空间的使用 366 *实验2 堆分配器的实现 372 *实验3 运行时栈的使用 379 第15章 程序正确性与程序性能优化 390 *实验1 大整数的乘及取模运算 390 *实验2 x86-64内联汇编 393 *实验3 程序性能调优 398 第16章 网络编程与并发编程 404 *实验1 基于客户–服务器模式的远程 计算器 404 *实验2 基于并发编程的远程计算器 408 *实验3 基于线程池的远程计算器性能 优化 411
|
| 內容試閱:
|
前 言 随着计算机信息技术的飞速发展,计算模式从早期多人一机的主机–终端模式发展为PC时代的一人一机模式,又发展为如今的人–机–物互联的智能化大数据并行计算模式。如今,各行各业都离不开计算机信息技术,计算机信息产业对我国现代化战略目标的实现有着极其重要的支撑作用。这对计算机专业人才培养提出了更高的要求,传统的计算机专业教学课程体系和教学内容已经远远不能满足现代社会对计算机专业人才的培养要求,计算机专业人才培养从原来更强调程序设计演变为更强调系统设计。这需要我们重新规划教学课程体系,调整教学理念和教学内容,加强学生系统能力培养,使学生能够深刻理解计算机系统整体概念,更好地掌握软/硬件协同设计和程序设计技术,从而更多地培养满足业界需求的各类计算机专业人才。不管培养计算机系统哪个层面的技术人才,计算机专业教育都要重视学生“系统观”的培养。 机械工业出版社2024年5月出版的主教材《计算机系统:基于x86+Linux平台》(ISBN 978-7-111-73882-4)主要介绍与计算机系统相关的核心概念,解释说明这些概念如何相互关联并最终影响程序执行的结果和性能,包括数据的机器级表示和处理、程序的转换及机器级表示、程序的链接与加载执行、存储器层次结构、虚拟存储器、进程与异常控制流、I/O操作的实现、程序性能的优化、网络编程以及并发编程等内容。该主教材以高级语言程序的开发和加载执行为主线,将高级语言源程序向可执行目标文件转换过程中以及可执行文件加载执行过程中涉及的基本概念关联起来,试图为读者建立起完整的计算机系统层次结构框架,初步构建计算机系统中每个抽象层及其相互转换关系,建立高级语言程序、ISA、编译器、汇编器、链接器、操作系统等系统核心层之间的相互关联,对指令在硬件上的执行过程、程序性能分析、网络编程和并发编程等有一定的认识和了解,从而增强读者在编程调试方面的能力,为后续“计算机组成原理”“操作系统”“编译原理”“计算机网络”等课程的学习打下坚实的基础。 主教材的内容涵盖面广、细节内容较多、篇幅较长,给使用的老师和学生带来了一些困难。为了更好地帮助主讲老师用好主教材,也为了学生能更好地理解课程中的核心概念,特别是让学生通过“学中做、做中学”的方式更好地掌握所学的理论知识,提高和增强其程序设计和程序调试能力,我们编写了这本实践辅助教材,对主教材中每一章的内容都设计了配套的实践项目。 本书包括基础级验证实验、模块级分析实验、系统级设计实验和高阶综合编程与分析实验4个级别的实践项目。其中,第1~5章属于基础级验证实验,第6~8章属于模块级分析实验,第9~13章属于系统级设计实验,第14~16章属于高阶综合编程与分析实验。主要实践内容及其设计思路说明如下。 第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个实验。前3个实验主要基于IA-32+Linux平台以及GCC编译驱动程序和gdb调试工具等,对C语言源程序中的函数调用语句、循环结构和选择结构等各类流程控制语句以及各类复杂数据类型的分配和访问等的机器级代码表示和实现进行实验,以帮助学生理解C语言程序在计算机系统中的底层实现机制,从而深刻理解高级语言程序、语言处理工具和环境、操作系统、指令集系统结构(ISA)之间的关联关系。第4个实验作为基础级验证实验部分的综合收官实验,通过对C语言程序及其机器级代码中缓冲区溢出漏洞的调试分析,以及利用缓冲区溢出漏洞进行模拟攻击的过程分析,将数据的表示、数据的运算和程序的机器级表示等内容贯穿起来,以进一步巩固学生对主教材相关内容的理解。第5个实验为64位架构平台上的实验,需要配置基于x86-64架构的Ubuntu(64位)Linux系统,在此基础上进行x86-64架构下的机器级表示实验。 第6章实验与主教材第2~4章教学内容配套,包含8个实验,包括字符串、浮点数、循环与选择(条件分支)结构、过程调用、数组与指针、结构体与链表/树等的机器级表示,通过对二进制程序的构成与运行逻辑的分析,将理论课程中关于程序的机器级表示的教学内容贯穿起来,使学生加深对其中各重要知识点的理解,并进一步巩固和掌握反汇编、跟踪/调试等常用编程技能。 第7章实验针对特定目标程序中存在的缓冲区操作漏洞,设计了一组不同复杂度的缓冲区溢出攻击任务,要求学生通过改变目标程序的运行状态和行为实现特定的攻击目标。按照缓冲区溢出攻击的不同目标,共包含以下5个阶段的实验:获得对程序的控制、植入攻击代码、模拟过程调用、应对栈地址随机化、ROP攻击。 第8章实验主要与主教材第5章(程序的链接)教学内容配套进行,按照主教材教学内容分阶段设计为以下6个实验:数据与ELF数据节、指令与ELF代码节、符号解析、switch语句与链接、重定位、位置无关代码。通过对一组可重定位目标文件中相关内容的分析和修改,将其链接成可正确运行的程序,从而使学生加深对理论课中关于ELF目标文件的基本结构和组成、程序链接过程(如符号解析与重定位)等基础知识和基本概念的理解,并掌握用于链接和目标文件解析等常用工具软件的使用。 本书第三部分的系统级设计实验是一个小型编程项目PA(Programming Assignment),通过C语言编程设计实现一个功能完备但简化的x86模拟器NEMU(NJU EMUlator),并构建一个基于NEMU的简单计算机系统。第9章主要介绍该实验需要的工具软件和实验环境设置。 第10章主要介绍PA项目中对通用寄存器和主存的模拟、整数运算函数的实现以及对整数传送与运算指令的模拟、浮点数运算函数的实现以及对浮点数运算指令的模拟。 第11章主要介绍PA项目中对指令解码与执行过程的模拟实现、内含调试器的基本功能以及调试命令的添加与实现、Kernel加载ELF文件过程的模拟实现。 第12章主要介绍PA项目中对缓存基本结构和缓存访问过程的模拟、x86保护模式下IA-32指令集架构的分段机制和分页机制的模拟实现。 第13章主要介绍PA项目中对IA-32+Linux系统中异常和中断处理机制(包括系统调用)的模拟、主机与外部设备之间I/O操作的模拟实现。I/O操作模拟包括对端口映射和内存映射两种I/O端口方式的模拟,以及串口通信、硬盘读写、键盘输入、屏幕输出等功能的模拟实现。为了验证PA项目所实现NEMU的正确性,本章介绍了通过游戏移植在NEMU上运行游戏软件的过程。 第14章的实践项目主要包括堆空间的使用、堆分配器的实现、运行时栈的使用3个实验。通过给定代码的学习,要求学生使用堆分配相关函数自行编写实现具有特定功能的小程序或模拟实现简单的堆分配器;使用gdb调试工具对机器级代码进行分析,观察和分析给定程序在运行时栈中的状态,观察局部变量和函数参数在栈中的存放位置,理解内联函数优化方法和通过栈进行参数传递的过程。 第15章的实践项目包含大整数的乘及取模运算、x86-64内联汇编、程序性能调优等程序正确性和程序性能方面的实验。 第16章的实践项目包括基于客户–服务器模式的远程计算器、基于并发编程的远程计算器和基于线程池的远程计算器性能优化3个实验。实验从一个简单的网络编程应用案例入手,通过设计与实现基于不同网络编程和并发编程技术的远程计算器,使学生了解和掌握网络编程和并发编程技术的主要内容及其需要解决的关键问题。 本书第1~5章由鲍培明和袁春风共同编写,第6~8章由苏丰编写,第9~13章由汪亮和余子濠共同编写,第14章由刘杰编写,第15章由王慧妍编写,第16章由朱光辉编写,全书由袁春风负责内容的组织与统稿。其中,第9~13章涉及的小型编程项目PA由余子濠原创,本书采用的PA项目相关实验教程基于余子濠为南京大学计算机学院2016年秋季学期“计算机系统基础”课程实验所写的NEMU模拟器设计实验讲义而编写。 本书配套实验代码可通过机工教育服务网或配套数字资源介质获取,面向任课教师使用的代码可向出版社申请获得。 本书的编写得到了南京大学“计算机系统基础”课程组老师和各届学生的大力支持,同时,国内许多使用《计算机系统基础》和《计算机系统导论》等教材进行教学的老师也都提出了宝贵的反馈和改进意见,在此表示衷心的感谢! 由于计算机系统相关的基础理论和技术在不断发展,新的思想、概念、技术和方法不断涌现,加之作者水平有限,在编写中难免存在不当或遗漏之处,恳请同行专家和广大读者对本书的不足之处给予指正,以便在后续的版本中予以改进。
作者于南京 2025年5月
|
|