2017-2018-1 20155225 《信息安全系统设计基础》第三周学习总结
教材学习内容总结
先记录一下第四周老师上课讲的内容:
- 学习Linux命令,可以提高效率。
- 系统调用
- 通过系统调用实现who命令。
who命令用来查看当前登录的用户信息。
借助man手册来查看who命令。
man手册是分章节的,第一节是可执行程序或shell命令,第二节是系统调用,第三节是库调用。所以我们在查看man手册时可以使用man -K key1 | grep key2 | grep key3的方式来过滤其他信息,提高查找效率。
举个栗子:printf是linux命令,也是库函数,所以在查看时注意区分,man 1 printf是查看linux命令里的printf,man 2 printf是查看库函数里的printf。
查看man手册时,注意看see also。
man还可以查看文件,在用man who查看who命令时,发现了utmp这个文件,可以再用man命令去查看utmp文件。知道了这是一个存放用户登录记录的文件,想要通过系统调用读取该文件,再用man查看系统调用的read :man -k read | grep 2 | grep file。先看用到的头文件,然后看函数原型,就知道怎么用了。在read的see also里发现了,write,这下读写都搞定了。
locate 头文件,可以看见文件被定义在哪里。
grep -nr 宏名 头文件位置,可以查看头文件里的宏定义。
然后是我看书上第二章的总结:
在看到寻址和字节顺序这一节的时候,我用书上实例程序,看了一下我自己的机器对不同数据值的字节表示,如下图所示:
我的机器是Linux64,采用的小端法,使用的8字节地址。
32位程序和64位程序的区别在于该程序的编译方式,而不是运行它的机器类型。
int32_t和int64_t数据大小是固定的,不随编译器和机器设置而变化。
字节对象的地址为所使用字节中最小的地址。排列一个字节对象的字节有两种规则——大端法和小端法。(在不同类型的机器之间通过网络传送二进制数据时需要协调)
位向量的一个重要作用就是表示有限集合,也就是编码集合。
位运算就是按位进行布尔运算,常见用法是实现掩码运算(从一个字中选出一些位的集合)
区别逻辑运算符与位运算符,逻辑运算符非0即为1,逻辑运算的返回结果只有1或者0,逻辑运算符如果对一个参数求值就能确定结果,则不会对第二个参数求值。
逻辑右移在左端补0.算术右移在左端补最高有效位。
C语言里有无符号数和有符号数,有符号数通过补码表示。
测试了书上48页的代码结果如下:
可见12345和-12345虽然仅一个正负之差,但其二进制表现却有很大差异。
补码数的符号拓展:
教材学习中的问题和解决过程
- 问题1:第48页的练习题2.18,在看这个反汇编列表的时候,不理解$,%rsp,%rax,%rid什么意思
- 问题1解决方案:去网上查了一下,知道了$表示偏移地址,rsp,rax,rid是寄存器。
代码调试中的问题和解决过程
- 问题1:在学习补码的时候,需要用到前面定义的show_bytes函数和自定义byte_pointer类型,虽然我同时编译了两个.c文件,但仍然提示我找不到这两个符号的定义。
解决方案:将这两个符号放到头文件里定义一下就okay了。
代码托管
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- [结对同学学号1](博客链接)
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...
其他(感悟、思考等,可选)
读教材第一遍也许读不懂,但隔几天,多读几遍就会有新的理解,再写写书上的示范程序,对内容的理解就更好了。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)