2017-2018-1 20155315 《信息安全系统设计基础》第5周学习总结
2017-2018-1 20155315 《信息安全系统设计基础》第5周学习总结
教材学习内容总结
本周我学习的是第3章,程序的机器级表示。
Intel处理器
- IA32是x86-64的32位前身。
- 8086是16位微处理器。
- 从i386开始,体系结构扩展到32位。
机器编程
- ISA:指令集体系结构或指令集架构
- 查看x86-64的机器代码:
- 程序计数器:给出将要执行的下一条指令在内存中的地址
- 整数寄存器:包含16个命名的位置,分别存储64位的值。
- 条件码寄存器:保存最近执行的算术或逻辑指令的状态信息。用来实现条件语句。
- 一组向量寄存器可以存放一个或多个整数或浮点数值。
反汇编特性
- 常用指令以及操作数较少的指令所需的字节数少。
- 设计指令:从给定的位置开始,可以将字节唯一地解码成机器指令。pushq %rbx是以字节值53开头的。
- 反汇编器使用的指令命名规则与GCC生成的汇编代码有所不同。
数据格式
GCC生成的汇编代码都带有一个字符后缀:
- movb:传送字节
- movw:传送字
- movl:传送双字(后缀‘l’也用来表示4字节整数和8字节双精度浮点数)
- movq:传送四字
教材学习中的问题和解决过程
这次学习中,很多知识都只是一知半解,暂时提的是表面的问题。
- 问题1:反汇编器使用的指令命名规则与GCC生成的汇编代码有什么不同?
- 问题1解决方案:
- 两边列出的地址不同,链接器将这段代码的地址移到了一段不同的地址范围中。
- 反汇编器中省略了很多指令的'q',这些后缀是大小指示符。
代码调试中的问题和解决过程
- 问题1:将p114代码编译之后,用cat命令查看汇编代码的文件,显示乱码。
- 问题1解决方案:用
od -tx1 mstore.o
查看
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 3.main.c 调用了静态库libmath.a中的函数,编译main.c的指令是()
- A .gcc -static main.c ./libmath.a -o main
- B .gcc -static main.c -L. -lmath -o main
- C .gcc -static main.c -L. -llibmath.a -o main
- D .gcc -static main.o ./libmath.a -o main
- 6.多选:
针对以上代码:gcc -c *.c 可以得到m.o,swap.o两个模块,哪些符号会出现在swap.o模块的.symtab条目中()- A .buf
- B .temp
- C .swap
- D .buffp0
- 解析:temp是局部变量,不出现在符号表中。
- 11.gcc hello.c产生的a.out属于()
- A .可重定位目标文件
- B .可执行目标文件
- C .共享目标文件
- D .目标模块或目标文件
- 17.链接器的重要性在于可以支持()
- A .静态库
- B .动态库
- C .分离编译
- D .调试
结对及互评
暂无
其他(感悟、思考等,可选)
这一章的内容是有关汇编的,看了书之后发现自己对汇编语言已经很陌生了,学习效率特别低。这一章我觉得知识点特别多,还要多敲代码能增进自己的理解。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 5/5 | 1/1 | 25/25 | |
第二周 | 236/241 | 3/4 | 30/55 | |
第三周 | 169/410 | 2/6 | 30/85 |
-
计划学习时间:20小时
-
实际学习时间:30小时
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)