《信息安全系统设计与实现》课程学习笔记1
知识点归纳
第一章
1.1 关于本书
本书研究Unix/Linux系统编程的专注,其中涵盖Unix/Linux的所有基本组件,包括进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和MySQL数据库系统,还着重探讨了编程实践。
1.2 系统编程的作用
系统编程是计算机科学和工程教育不可或缺的一部分。
- 教授学生计算机系统软件方面的广博知识以及高级编程技巧,有效利用系统资源开发应用软件
- 为学生打下扎实的专业基础,一边在操作系统、嵌入式系统、数据库系统、数据挖掘、人工智能、计算机网络、网络安全、分布式和并行计算等计算机科学/工程领域继续深造
1.3 本书的目标
- 强化学生的编程背景知识
- 动态数据结构的应用
- 进程概念和进程管理
- 并发编程
- 定时器和定时功能
- 信号、信号处理和进程间通信
- 文件系统
- TCP/IP和网络编程
1.4 目标读者
供以技术为导向、理论与编程实践并重的计算机科学/工程专业学生使用。
1.5 本书的独特之处
- 本书自成一体
- 本书使用一个简单的多任务系统来介绍和阐释了进程的抽象概念
- 本书详细描述了Unix/Linux中各种进程的来源和作用,包括系统启动、初始化进程、守护进程、登录进程以及用户sh进程等。
- 本书介绍了并行计算和并发编程
等等
1.8 关于Unix
Unix是一种通用操作系统。
Unix系统的各个版本:
- AT&T Unix
- Berkeley Unix
- HP Unix
- IBM Unix
- Sun Unix
1.9 关于Linux
- Linux是一个类Unix系统。
- Linux系统包括其他Unix系统的许多特性。
- Linux可免费试用,易于安装。
1.10 Linux版本
- Debian Linux
- Ubuntu Linux
- Linux Mint
- 基于RPM的Linux
- Slackware Linux
1.11 Linux硬件平台
Linux最初是为基于Intel x86的个人计算机而设计,主要硬件平台仍是基于Intel x86的个人计算机。
1.12 虚拟机上的Linux
大多数用户会在Windows主机内的虚拟机上安装和运行Linux。
虚拟机的种类:
- VirtualBox
- VMware
本机安装了VMware workstation pro
- 双启动Slackware和Ubuntu Linux
1.13 使用Linux
- Linux内核映像
内核映像位于/boot中 - Linux启动程序
最受欢迎的Linux启动加载程序是GRUB和LILO。 - Linux启动
启动加在程序首先会定位Linux内核映像(文件),然后加载BOOT+SETUP至实模式内容的0x90000处,加载内核至高端内存的1MB处。 - Linux运行级别
Linux内核以单用户模式启动。 - 登录进程
登录进程将在其终端上打开三个文件流:stdin stdout stderr,额庵后等待用户登录。 - 命令执行
登录后,用户进程通常会执行命令解释程序sh,提示用户执行命令。
1.14 使用Ubuntu Linux
- Ubuntu版本
推荐使用Ubuntu Linux15.10或更高版本 - Ubuntu Linux特性
- 按下“Ctrl+Alt+T”组合键打开一个伪终端
- 右键点击“Term”(终端)图标,选择“lock to launcher”(锁定到启动器)
- 出于安全问题,用户应为普通用户,而不是根用户或超级用户。要运行任何特权命令,用户必须输入sudo command
首先会验证用户密码 - 在当前目录下运行程序,用户每次需输入./a.out
1.15 Unix/Linux文件系统组织
Unix/Linux文件系统采用树形组织结构
- 文件类型
(1)目录文件
可能包含其他目录和文件
(2)非目录文件:常规文件和特殊文件
(3)符号链接文件
文件是指向其他文件的指针 - 文件路径名
文件系统树的根节点成为根目录
以“/”开头的路径名为绝对路径名,反之为相对于进程当前工作目录(CWD)的相对路径名。 - Unix/Linux命令
最常用的命令:
1.16 Ubuntu Linux系统管理
- 用户账户
保存在/etc/passwd文件中 - 添加新用户
方式为sudo adduser username
(此处课本adduer错误)
第二章
2.1 Linux中的文本编辑器
- vim
vim是Linux的标准内置编辑器。
vim启动时,处于默认的命令模式。输入i或a切换到插入模式
i:插入模式,插入文本
a:插入模式,追加文本
退出插入模式,按ESC。命令模式下,输入“:”进入末行模式,将文本保存为文件或退出vim
:w:写入(保存文件)
:q:退出vim
:wq:保存并退出
:q!:不保存更改,强制退出 - gedit
- emacs
2.2 使用文本编辑器
- 使用emacs
- emacs菜单
- emacs的集成开发环境
2.3 程序开发
- 程序开发步骤
1.创建源文件
2.用gcc把源文件转换成二进制可执行文件
- 静态与动态链接
创建二进制可执行文件的方式为静态链接和动态链接。
动态链接的优点:
1.可减小每个a.out文件大小
2.许多可执行程序可在内存中共享相同的库函数
3.修改库函数不需要重新编译源文件
动态链接所用的库成为动态链接库,在Linux中成为共享库。 - 可执行文件格式
1.二进制可执行平面文件
2.a.out可执行文件
3.ELF可执行文件 - a.out文件的内容
1.文件头
2.代码段
3.数据段
4.符号表
- 程序执行过程
在类Unix操作系统中,在sh命令行输入a.out one two three执行a.out文件,以标记字符串作为命令行参数。 - 程序终止
可通过正常终止(调用库函数exit(0)(系统调用)来终止进程)和异常终止(按下ctrl+C可以产生硬件中断;用kill -s signal_number pid #signal_number=1 to 31向通过pid识别的目标进程发送信号)两种方法终止正在执行a.out的进程。
2.4 C语言中的函数调用
- 32位GCC中的运行时堆栈使用情况
- long jump
- 64位GCC中的运行时堆栈使用情况
2.5 C语言程序与汇编代码的链接
- 用汇编代码编程
GCC生成汇编代码由三部分组成:
1.入口代码
2.函数体代码
3.退出代码 - 用汇编语言实现函数
- 从汇编中调用c函数
2.6 链接库
-
动态链接库
gcc -c -fPIC mysum.c
gcc -shared -o libmylib.so my sum.o
gcc t.c -L -lmylib
export LD_LIBRARY_PATH=./
a.out
-
静态链接库
gcc -c mysum.c
ar rcs libmylib.a mysum.o
gcc -static t.c -L. -lmylib
a.out
2.7 makefile
问题与解决思路
问题
(1)不理解绝对路径名和相对路径名的区别与意义
(2)不理解makefile中的宏的定义与意义
解决思路
实践过程截图
我实践了老师上课讲的代码示例,掌握了基本的linux语言与gcc编译器语言
代码链接
- hello.c
#include<stdio.h>
#include"hello.h"
void say_hello(){
printf("Hello World!");
}
- main.c
#include<stdio.h>
#include"hello.h"
int main(){
say_hello();
return 0;
}
- hello.h
#ifndef __HELLO_H__
#define __HELLO_H__
/***
*fuction:print hello string
*param:void
*return value:void
*
*/
void say_hello();
#endif