2017-2018-1 20155314 《信息安全系统设计基础》第1周学习总结
2017-2018-1 20155314 《信息安全系统设计基础》第1周学习总结
教材学习内容总结
学习目标
- 熟悉Linux系统下的开发环境
- 熟悉vi的基本操作
- 熟悉gcc编译器的基本原理
- 熟练使用gcc编译器的常用选项
- 熟练使用gdb调试技术
- 熟悉makefile基本原理及语法规范
- 掌握静态库和动态库的生成与调用方法
- 理解C程序中模块的概仿,模块分解的“高内聚,低耦合”的原则
- 了解链接的概念
课堂笔记整理及课后实践
2017.09.20
Linux下:
vi hello.c
gcc hello.c
./a.out .表示当前目录
gcc hello.c -o
echo $? 查看程序返回值
od -tx1 hello.c
od -tx2 hello.c
od -tc hello.c
查看文件内容
od -tc -tx1 hello.c
查看程序十六进制表示
gcc -E hello.c -o hello.i
将hello.c预处理为hello.i
vi hello.i
gcc -S hello.i -o hello.s
将hello.i编译为hello.s
vi hello.s
gcc -c hello.s -o hello.o
将hello.s汇编为hello.o
vi hello.o
显示乱码:
od -tc hello.o
objdump -d hello.o
将机器码反汇编得到汇编码
ls hello.*
gcc hello.o -o hello
将hello.o链接为hello
-
巧记:
E S c
↓↓↓
i s o
程序出错了该如何调试?
-
终端下用
^+shift+T
打开三个窗口:- Vi
- gcc
- gdb
-
vim:
vi gdbbasic.c
-
gcc:
gcc gdbbasic.c
gcc -g gdbbasic.c
-
gdb:
gdb a.out
-
cgdb:显示代码调试状况
断点
- 行断点:b 行号
- 函数断点:b fxx
- 临时断点:tb
- 条件断点:b if
- 命令:
C
(Continue)从一个断点到下一个断点b
设断点r
运行s
(step)进入函数内部n
(next)下一行(直接执行完函数)q
(quit)退出p
(print)显示值display
显示值(只要值变化就显示出来)finish
结束循环until
执行完循环
教材内容提炼
第一章
- 信息=位+上下文
- 程序被其他程序翻译成不同的格式
- 熟悉编译系统的好处
- 优化程序性能
- 理解链接时出现的错误
- 避免安全漏洞
- 系统的硬件组成
- 总线
- 计算机中总线传送定长的数据,这个定长是字,是一个基本的系统参数
- I/O设备
- I/O设备可以通过控制器或适配器与I/O总线相连
- 主存
- 主存在逻辑上可以看作字节数组
- 处理器
- 处理器的存储操作可以从寄存器中复制一个字节的数据到主存中
- 总线
- 高速缓存至关重要
- 存储设备形成层次结构
- 主要思想:上一层的存储器作为低一层存储器的高速缓存
- 操作系统管理硬件
-
操作系统的两个基本功能
- 防止硬件被失控的应用程序滥用(进程、虚拟内存实现)
- 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备(文件实现)
-
进程
- 实现进程这个抽象概念需要低级硬件和操作系统软件之间的紧密合作
-
线程
-
虚拟内存(从低到高)
- 程序代码和数据
- 堆
- 共享库
- 栈
- 内核虚拟内存
- Linux中,内核虚拟内存在虚拟地址空间的高端
-
文件
-
- Amdahl定律
- Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比(❌)
- 并发和并行
教材学习中的问题和解决过程
- 问题1:什么是GCC?
- GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。
- 问题2:什么是汇编和反汇编?
- 汇编(Assembly):把汇编语言翻译成机器语言的过程
- 反汇编(Disassembly):把目标代码转为汇编代码的过程
- 问题3:什么是GUI?
- 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
代码调试中的问题和解决过程
- 问题1:
git add .
时报错:fatal: Not a git repository (or any of the parent directories)
- 解决方案:这是由于本地版本管理仓库被删除了,需要用
git init
命令重新初始化仓库,建立新的仓库:
- 问题2:
git push
时报错:fatal: The current branch master has no upstream branch.
- 解决方案:利用
git push -u origin master -f
命令强制覆盖已有的分支后再push,push成功:
代码托管
上周考试错题总结
- Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比(❌)
结对及互评
本周结对学习情况
- 20155323
- 结对学习内容
- 教材第1章 计算机系统漫游
其他(感悟、思考等,可选)
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:5小时
-
实际学习时间:2小时