20211306 密码系统设计与实现课程学习笔记1
学习任务详情
自学教材第1,2章,提交学习笔记
- 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容
“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”
核心是要求GPT:“请你以苏格拉底的方式对我进行提问”
然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?
如果你觉得差不多了,可以先问问GPT:“针对我XXX知识点,我理解了吗?”
GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下
- 问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图
- 实践过程截图,代码链接
- 其他(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)
一、1、2章学习总结
- Unix/Linux命令
ls 列出cwd或目录的内容
cd 更改目录
pwd 打印cwd的绝对路径名
find 搜索文件
ssh 登录到远程主机
.
.
.
等
- 文本编辑器
vim是Linux的标准内置编辑器,有三种不同的操作模式,分别是
- 命令模式:用于输入命令
- vim启动时默认是命令模式
- h:光标向左移一个
- l:光标向右移一个
- j:光标向下移一个
- k:光标向上移一个
- 插入模式:用于输入和编辑文本
输入i或者a命令切换到插入模式
- i:插入文本
- a:追加文本
- esc一次或多次:推出插入模式
- 末行模式:用于保存文件并退出
输入":"进入末行模式
- w:写入文件
- q:退出vim
- wq:退出并保存
- q!:不保存更改,强制退出
以上是我在与chatgpt聊天时学到的一些知识
gedit
gedit是GNome桌面环境默认的文本编辑器,它是ubuntu及其他使用gnome GUI用户界面的Linux默认编辑器
emacs
可在不同平台运行,GNU Emacs可在大多数Linux发行版中使用
- 使用文本编辑器
emacs
输入 emacs【FILENAME】 使用一个可选文件名调用emacs编辑器
创建源文件后,按下meta键序列“CTRL+X+C”保存文件并退出,输入“y”保存文件并退出emacs
- 程序开发
gcc
gcc是一个程序,步骤如下
gcc将源文件装换位二进制可执行文件
- gcc t1.c t2.c
生成一个二进制可执行文件 a.out
a.out
文件头
- tsize:代码段大小
- dsize:包含初始化全局变量和初始化静态局部变量的数据段大小
- bsize:包含未初始化全局变量和未初始化静态局部变量的bss段的大小
- total_siaze:加载的a.out文件的总大小
代码段,也叫正文段,包含程序的可执行代码
数据段:包含初始化全局变量和初始化静态数据
符号表:可选,仅为运行调试所需
执行
在sh命令行 a.out one two three
执行a.out文件,sh创建一个子进程并等待其终止,子进程运行时,sh使用a。out文件,按照以下不愁创建新的执行映像
- 读取a.out文件头
- makefile
格式
目标项、依赖项、规则
make程序
假设我们有一个c语言程序包含三个源文件
- 用sh指令 gcc -o myt main.c mysum.c
- make -f mk1 :使用mk1作为makefile运行make
- gcc -o myt t.c mysum.c make将构建目标文件myt
makefile变量
- $@:当前目标名
- $<:第一个依赖项名
- $^:所有依赖项名
- $*:不包含扩展名的当前依赖项名
- $?:比当前目标更新的依赖项列表
PMTX系统makefile
PMTX是一个类Unix操作系统,其源文件放在三个子目录中
- Kernel:PMTX内核文件;一些GCC汇编文件,用于C语言编写
- Fs:文件系统源文件;均用C语言编写
- Driver:设备驱动源文件;均用C语言编写
- GDB调试工具
GDB是一个交互式调试工具,可以调用C、C++和其它几种语言的程序
在emacsIDE中使用GDB
makefile
- gcc -g -o t t.c
启动GDB- gdb -i=mi t
二、苏格拉底提问GPT
刚开始我在写学习总结时,想让gpt帮我写,但是他写不出来
三、linux代码运行
写一个简单的c语言代码
对他进行gcc编译,但是在生成hello.o的时候出现问题,应该是hello.s文件出错了
于是我先进行了查看二进制文件的操作
下面开始问gpt怎么解决,以下都是问的一些相关问题
但是都没有解决,然后在csdn上找到了答案,文章名叫《计算机系统学习笔记一————gcc分布编译,汇编报错》才发现是写代码的时候,大小写区分错误,"esc"的-E和-S都是大写,-c是小写,这样就解决了问题
然后进行下一个实践
这里也出现了一个问题,就是编译出"main"文件时,在进行"gcc./src/*.c -Iinclude -o bin/main"操作之后,"main"文件就会消失,我也问了gpt,但也没有得到实际解决
但最后还是自己调试成功了
本次任务到此就基本结束了,老师在课上讲,不自己操作是不会使用代码的,我深深体会到了这句话的含义,老师在课上轻松的操作,我在课下却耗费了一整个下午!