# 2018-2019-1 20165225《信息安全系统设计基础》第一周学习总结
Posted nmsl123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# 2018-2019-1 20165225《信息安全系统设计基础》第一周学习总结相关的知识,希望对你有一定的参考价值。
2018-2019-1 20165225《信息安全系统设计基础》第一周学习总结
教材学习内容总结
vim的用法
- 命令行输入vimtutor即可随时查看:
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
测试1-vi
- 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
- 用Vi输入图中代码,并用gcc编译通过
- 在Vi中使用K查找printf的帮助文档
- 提交vi编辑过程截图,要全屏,包含自己的学号信息
测试2-gcc测试
- 用gcc 进行预处理,编译,汇编,链接vi输入的代码
- 生成的可执行文件中要有自己的学号
- 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息
- 预处理:gcc -E -I include src/.c -o bin/.i
测试3-gdb测试
- 用gcc -g编译vi输入的代码
- 在main函数中设置一个行断点
- 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
- 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
- 首先要gcc -g来生成一个可执行文件,打开gdb调试,然后设置行断点 b 9(第九行)
测试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
测试5-共享库
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
- 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
- 输入图上代码生成一个共享库文件,并用共享库文件生成一个可执行文件:
课本学习
第一章
- 计算机系统由硬件和系统软件组成,两者共同运作以运行应用程序。内部信息被表示为一组组的位,位依据上下文有不同的解释方式。
- 程序被其他翻译程序翻译成不同形式,开始是被翻译成ASCII文本,然后被翻译成计算机可执行的二进制文本。如果是用Code::Blocks等编译软件编译,则在编译完成后自动生成可执行文本;若是用vim,则必须手动完成翻译工作。
- 处理器通过读取并解释二进制指令来运行程序。
第七章
- 链接可以在编译时依靠静态编译器完成,也可以在加载时靠动态链接器完成。链接器的目标文件只有二进制文件一种。
- 链接器主要任务有二:符号解析和重新定义。
- GCC编译器在工作过程中调用得到的链接器为静态链接器,其他编译驱动程序亦是如此。
- 与编译位置无关的代码的共享库可以加载到任何地方,亦可以在运行中被多个进程共享。
每一章的问题:
第一章 计算机系统的核心概念是什么?
第二章 计算机有32位与64位之分,分别何在?两种计算机所存数据相互交换,会出现什么情况?
第三章 条件控制来实现条件分支和条件传送来实现条件分支有何实质性区别?
第四章 到底什么系统会用到Y86-64代码?
第五章 怎么样的代码是不必要的引用内存?
第六章 基本存储技术都包括哪些?
第七章 静态链接和动态链接有何区别?
第八章 异常控制流在计算机的各个层次都有怎样的作用?
第九章 虚拟存储器的作用?
第十章 1Unix I/O是什么
第十一章 协议软件需要的基本能力有哪些?
第十二章 三种不同的并发编程技术的区别:
问题1:C语言是一种面向过程语言,C++和Java是面向对象语言,而Unix是由C语言实现的,那么,面向对象语言的程序是怎么在面向过程语言的系统中运行的?
问题1解决方案:一点思考,将所有程序的文本全部翻译成机器语言,那么计算机就可以直接执行命令了。面向对象和面向过程只是相较于我们来分的,对于计算机其实并没有差别,因为不管什么样的高级编程语言到最后都会翻译成一连串的二进制码。
代码调试中的问题和解决过程
代码调试只在首次使用GCC、GDB编译过程中出现,属于熟练度不够问题,重复练习即可解决。
代码托管
其他
- 本周我们开始了信息安全系统设计基础课程的学习。第一节课的课程主要是复习了上学期学习java所用到的Ubuntu的一些快捷命令,老师还教授了c语言如何在命令行中进行编译及其他相关问题,总的来说还需要多投入时间学习消化。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3500行 | 12 | 14小时 | |
第一周 | 63/150 | 1/12 | 3小时 |
参考资料
以上是关于# 2018-2019-1 20165225《信息安全系统设计基础》第一周学习总结的主要内容,如果未能解决你的问题,请参考以下文章
2018-2019-1 20165225《信息安全系统设计基础》第九周学习总结
2018-2019-1 20165225《信息安全系统设计基础》第四周学习总结