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小时

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2017-10-22 14:34  20155315庄艺霖  阅读(358)  评论(0编辑  收藏  举报