《信息安全系统设计与实现》第一周学习笔记
一、知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图
第一章
- 关于本书
- 涵盖Unix/Linux的所有基本组件,包括进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和MySQL数据库系统
- 系统编程的作用
- 有效利用系统资源来开发应用软件
- 以便在操作系统、嵌入式系统、数据库系统、数据挖掘、人工智能、计算机网络、网络安全、分布式和并行计算等计算机科学/工程领域继续深造
- 本书目的
- 强化学生的编程背景知识
- 动态数据结构的应用
- 进程概念和进程管理
- 并发编程
- 定时器和定时功能
- 信号、信号处理和进程间通信
- 文件系统
- TCP/IP和网络编程
- 关于Unix
- AT&T Unix
- Berkeley Unix
- HP Unix
- IBN Unix
- Sun Unix
可以看出,大多数Unix系统都是专有的,并且与特定的硬件平台相关联。
- 关于Linux
- Debian Linux
- Ubuntu Linux
- Linux Mint
- 基于RPM的Linux
- Slackware Linux
- 虚拟机上的Linux
- VirtualBox
- VMware
- Parallels Desktop(我使用的)
- Ubuntu Linux系统管理
- 用户账户
在终端上输入 vi /etc/passwd
- 添加新用户
在终端上输入 sudo adduser username,我创建一个名为wq的用户
可以看到,passwd文件中最后一行多出了叫wq的用户
- sudo命令
- 用户账户
第二章
- 文本编辑器
-vim-
i:插入模式,插入文本
-
a:插入模式,追加文本
退出插入模式,按ESC。命令模式下,输入“:”进入末行模式,将文本保存为文件或退出vim -
:w:写入(保存文件)
-
:q:退出vim
-
:wq:保存并退出
-
:q!:不保存更改,强制退出
-
emacs
以下是我关于使用emacs和gdb工具进行调试的实践过程- 编写源代码
2.创建makefile(emacs makefile)
3. compile
4.设置断点
5. 调试窗口
- 编写源代码
-
gedit
-
- 程序开发步骤
- 创建源文件
- 用gcc把源文件转换成二进制可执行文件
- gcc
以下是关于程序开发知识点的苏格拉底挑战:
- 全局变量
- 局部变量
- 静态全局变量
- 非静态全局变量
- 自动变量
- 寄存器变量
- 易失性变量
以下是关于gcc三个步骤的苏格拉底挑战:
- 程序执行过程
在类Unix操作系统中,在sh命令行a.out one two three
执行a.out文件,以标记字符串作为命令行参数。
为执行命令,sh创建一个子进程并等待改子进程终止。子进程运行时,sh使用a.out文件执行新的执行映像- 读取a.out文件头
Total_Size = _brk + stackSize
e.g main() - sh从总大小中分配一个内存区给执行映像
- sh放弃旧映像,开始执行新映像
- 执行从crt0.o开始,调用main(),将argc和argv作为参数传递给main(),可以写成
int main(int argc, char *argv[]){ … }
- 读取a.out文件头
- 程序终止
- 正常终止:如果程序执行成功,main()最终会返回到crt0.out,调用库函数exit(0)(系统调用)来终止进程
- 异常终止:遇到错误,如无效地址,非法指令,越权等;按下ctrl+C可以产生硬件中断;用
kill -s signal_number pid #signal_number=1 to 31
向通过pid识别的目标进程发送信号
- C语言中的函数调用
- long jump
- C语言程序与汇编代码的链接
- gcc生成的汇编代码
- 入口代码
- 函数体代码
- 退出代码
- gcc生成的汇编代码
- 链接库
- 动态链接库
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
- 动态链接库
- makefile
- GDB调试工具(实践过程已列出,此处不再赘述)
遇到的问题
vim的插入文本和追加文本有什么区别(即输入i和输入a的区别是什么?)
解答过程:
- GPT:
在vim中,插入文本和追加文本的区别在于光标的位置不同。
当你使用插入文本时,新添加的文本将会插入到光标所在位置之前,而原有的文本将会被移动到插入文本之后。
当你使用追加文本时,新添加的文本将会追加到光标所在位置之后,而原有的文本不会被移动。
你可以使用 i 命令来进入插入模式,在光标所在位置之前添加新的文本;使用 a 命令来进入插入模式,在光标所在位置之后追加新的文本。
随后又去试了一下,解决了这个问题。
- 模块实践过程
运行结果和文件路径如下:
文件已上传:hello