20145204《信息安全系统设计基础》第2周学习总结
20145204《信息安全系统设计基础》第2周学习总结
教材学习内容总结
第一章
•编译器驱动程序
源程序:利用编辑器创造并保存的文本文件。以hello程序为例,文件名是hello.c。
源程序——>可执行文件的转换是由编译器驱动程序完成。
在unix系统上的命令是```gcc –o hello hello.c。
其中分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。
最后运行可执行文件的命令:./hello。
•系统的硬件组成
1.总线。
总线是贯穿整个系统的一组电子管道,携带信息字节并在各个部件之间传递。
2.I/O设备。系统与外界世界的联系通道。例如:键盘、鼠标、显示器,以及存储数据和程序的磁盘。
3.主存。临时存储设备,在处理器执行程序时,用来存放程序和处理的数据。
4.处理器。中央处理单元(CPU),简称处理器。执行存储在主存中指令的引擎。其核心是一个字长的寄存器。CPU的主要操作:加载,即将信息从主存复制到寄存器。存储,即将信息从寄存器复制到主存。操作,将两个寄存器的内容复制到ALU,ALU对两个字做算术操作,结果存放到一个寄存器中。跳转,从指令中取出一个字复制到程序计数器中。
·高速缓存器:用于存放处理器近期可能会处理的信息数据,提高程序性能。
第七章后面内容有涉及。
vi的基本操作
·最基本文本编辑
1.光标移动:h:光标左移;j:光标下移;k:光标上移;l:光标右移。
2.字符编辑:将光标移动到需要修改的字符位置,x键:删除该字符;i键:在光标前添加某字符。
3.文本编辑:无论光标放在哪里,。A键:都会在末尾连续添加字符
4.退出:输入
5.删除类命令:dw:当前光标处到下一个单词开始处删除。de:当前光标到单词结束。d$:当前光标到行末。
·编译:
·编译单个程序:以hello为例
1.gcc hello.c -o hello
2.运行:./hello
·编译模块化程序和单个程序类似不举例了
作业从控制台输入接收参数,然后把输入的参数打印出来。实现结果:
编译过程:
· 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp
· 编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl
· 汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as
· 链 接:gcc hello.o –o hello ;gcc -o 调用ld
gdb调试
· GDB最基本的命令有:(注意使用GCC编译时要加“-g”参数。)
0.gdb programm(启动GDB)
1.l 列出源码,相当于list
2.b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
·行断点:break line
·函数断点:break function
·条件断点:break line if 条件
·临时断点:tbreak
3.run 开始运行程序
4.bt 打印函数调用堆栈
5.p 查看变量值
6.c 从当前断点继续运行到下一个断点
7.n 单步运行
8.s 单步运行
9.quit 退出GDB
在实验的过程中发现实验楼给出的程序返回div总是0,以此为例调试:
1.gdb main
进入gdb并输入命令l
显示程序:
2.输入命令break div
,run
等命令查看发现在进入函数时a=16,b=2,函数参数未丢失,但是结果返回却是0,考虑是否是强制转换数据类型的问题。
3.修改div.c文件,添加double s=(double)a/b,return s
,调试显示s结果正确但还是最后结果有问题
4.最后就只能是函数返回值的问题?
·makefile
Makefile的一般写法:
试着将add.c……等程序makefile(注意使用Tab键):
·生成静态库math.h,共享库math.so
· 生成静态库:
1.生成目标文件gcc -c add.c sub.c mul.c div.c
2.生成静态库:ar rcs math.a add.o sub.o mul.o div.o
·生成共享库
1.生成目标文件:gcc -fpic -c add.c sub.c mul.c div.c
2.生成共享库:gcc -shared -o math.so add.o sub.o mul.o div.o
以下是步骤过程图,在最后用ls显示当前目录的文件可以看见静态库和共享库生成。
学习中遇到的问题与解决方法
· 在git搭建远程仓库后出现以下的问题:无法推送一些条引用到git……,使用+master也无法推送
解决办法:输入git fetch origin master
,后继续输入:git merge origin/master
实现从远程分支获取最新版本。最后成功推送。
· unbuntu安装vimtutor时出现错误:
解决办法:
利用ps aux查看进程
找到_apt的pid
使用sudo kill 杀死进程
·gdb问题
如果没有使用-g参数编译程序,gdb时就会出现下面问题:
· makefile问题:
1.不使用tab键,会出现如下错误。只需要将你空格的地方改为Tab键即可。
托管代码截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3500行 | 30篇 | 400小时 | |
第一周 | 100/100 | 1/1 | 20/20 | |
第二周 | 200/300 | 1/2 | 30/50 |