2018-2019-1 20165225《信息安全系统设计基础》第一周学习总结

2018-2019-1 20165225《信息安全系统设计基础》第一周学习总结

教材学习内容总结


vim的用法
  • 命令行输入vimtutor即可随时查看:

image

linux系统下文件的转换:
  • gcc hello.c => 编译hello.c源程序,出现a.out文件
  • gcc -o hello hello.c => 编译hello.c源程序,出现hello文件
  • od -tc -tx1 hello.c => 按单字节查看文件内容
  • gcc -E hello.c -o hello.i => 预处理阶段
  • gcc -S hello.c -o hello.s => 编译阶段
  • gcc -C hello.c -o hello.o => 汇编阶段
  • od -c hello.o => 查看汇编码
  • objdump -d hello.o => 得到汇编码
  • gcc hello.o -o hello => 使hello文件可执行
调试
  • gcc -g hello.c => 调试
  • gdb a.out
  • b main => 在main中设断点b
  • info b => 查看断点b情况
  • run => 运行
断点
  • b fxx => 函数断点
  • b +行号 => 行断点
  • tb => 临时断点
  • b if => 条件断点
  • 常用cgbd
  • cgbd a.out
  • s => step
  • n => next
  • qit
  • p => print
  • p i ... => 改值
  • f => finish

image

测试1-vi

  • 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
  • 用Vi输入图中代码,并用gcc编译通过
  • 在Vi中使用K查找printf的帮助文档
  • 提交vi编辑过程截图,要全屏,包含自己的学号信息

image

测试2-gcc测试

  • 用gcc 进行预处理,编译,汇编,链接vi输入的代码
  • 生成的可执行文件中要有自己的学号
  • 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息
  • 预处理:gcc -E -I include src/.c -o bin/.i

image

测试3-gdb测试

  • 用gcc -g编译vi输入的代码
  • 在main函数中设置一个行断点
  • 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
  • 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
  • 首先要gcc -g来生成一个可执行文件,打开gdb调试,然后设置行断点 b 9(第九行)

image

测试4-静态库的测试

  • 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
  • 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
  • 加上-g将.c文件编译成.o文件,输入图上指令生成一个mymath.a的静态库文件,然后用mymath.a文件生成一个可执行文件test

image

测试5-共享库

  • 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
  • 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
  • 输入图上代码生成一个共享库文件,并用共享库文件生成一个可执行文件:

image

测试6-Makefile

  • 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
  • 提交Make过程截图,要全屏,包含自己的学号信息
  • 图中的名字是我自己改的

image

课本学习

第一章

  • 计算机系统由硬件和系统软件组成,两者共同运作以运行应用程序。内部信息被表示为一组组的位,位依据上下文有不同的解释方式。
  • 程序被其他翻译程序翻译成不同形式,开始是被翻译成ASCII文本,然后被翻译成计算机可执行的二进制文本。如果是用Code::Blocks等编译软件编译,则在编译完成后自动生成可执行文本;若是用vim,则必须手动完成翻译工作。
  • 处理器通过读取并解释二进制指令来运行程序。

第七章

  • 链接可以在编译时依靠静态编译器完成,也可以在加载时靠动态链接器完成。链接器的目标文件只有二进制文件一种。
  • 链接器主要任务有二:符号解析和重新定义。
  • GCC编译器在工作过程中调用得到的链接器为静态链接器,其他编译驱动程序亦是如此。
  • 与编译位置无关的代码的共享库可以加载到任何地方,亦可以在运行中被多个进程共享。

每一章的问题:

第一章 计算机系统的核心概念是什么?

第二章 计算机有32位与64位之分,分别何在?两种计算机所存数据相互交换,会出现什么情况?

第三章 条件控制来实现条件分支和条件传送来实现条件分支有何实质性区别?

第四章 到底什么系统会用到Y86-64代码?

第五章 怎么样的代码是不必要的引用内存?

第六章 基本存储技术都包括哪些?

第七章 静态链接和动态链接有何区别?

第八章 异常控制流在计算机的各个层次都有怎样的作用?

第九章 虚拟存储器的作用?

第十章 1Unix I/O是什么

第十一章 协议软件需要的基本能力有哪些?

第十二章 三种不同的并发编程技术的区别:

作业中出现的问题:

    - ar cr math.a add.o sub.o mul.o div.o 静态库的编译未通过。

解决方案: 退回根文件夹进行编译,编译通过。

其他

  • 本周我们开始了信息安全系统设计基础课程的学习。第一节课的课程主要是复习了上学期学习java所用到的Ubuntu的一些快捷命令,老师还教授了c语言如何在命令行中进行编译及其他相关问题,总的来说还需要多投入时间学习消化。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3500行 12 14小时
第一周 63/150 1/12 3小时

参考资料

posted @ 2018-09-23 22:29  牛奶仔丶  Views(194)  Comments(0Edit  收藏  举报