2018-2019-1 20165226 《信息安全系统设计基础》第1周学习总结
目录
教材学习内容总结
**** ### 一、 GCC编译 > 1.单文件 >>预处理:`gcc -E hello.c -o hello.i` >>编译:`gcc -S hello.i -o hello.s` >>汇编:`gcc -c hello.s -o hello.o` >>链接:`gcc hello.o -o hello` > > ***或者直接用ESC.iso***2.多模块
一起编译:
gcc test_a.c test_b.c -o test
或者gcc *.c -o test
分别编译各个源文件,之后对编译后输出的目标文件链接
3.-I参数
***.h文件放在include中,.c文件放入src中
用于指明头文件路径
二、 GDB命令行界面使用技巧
- 条件断点
- 设置断点:
b 5(如果要在第五行断点)
- 条件断点:
b 5 if i=5
- 设置断点:
- 命令补全:
TAB
- 部分gdb常用命令:
命令 | 简写形式 | 说明 |
---|---|---|
list | l | 查看源码 |
backtrace | bt、where | 打印函数栈信息 |
next | n | 执行下一行 |
step | s | 一次执行一行,遇到函数会进入 |
finish | 运行到函数结束 | |
continue | c | 继续运行 |
break | b | 设置断点 |
info breakpoints | 显示断点信息 | |
delete | d | 删除断点 |
p | 打印表达式的值 | |
run | r | 启动程序 |
until | u | 执行到指定行 |
info | i | 显示信息 |
help | h | 帮助信息 |
- 执行shell命令
在gdb命令行界面可以执行外部的shell命令:
(gdb) !shell命令
三、静态库与动态库
静态库
生成:
①生成四个.o文件
gcc -c -I/头文件所在路径 add.c sub.c mul.c div.c
②生成静态库ar rcvs libmath.a add.o sub.o mul.o div.o
调用:先后使用
gcc main.c -o main -I/头文件所在路径 -L. -lmath
和./main
来生成main文件并调用静态库执行文件
动态库
生成:
①生成四个文件:
gcc -fPIC -c -I/头文件所在路径 add.c sub.c mul.c div.c
②生成动态库(共享):gcc -shared -o mymath.so add.o sub.o mul.o div.o
调用:
gcc -I/头文件所在路径 -o main main.c -L. -lmath
注意!!如果执行文件发生错误,则返回上一级查看文件
libmath.a
或者mymath.so
是否在lib里,若不是则通过mv
语句将文件移到lib
下
四、Makefile
-
创建:
vi makefile
-
书写:
targets : prerequisites
command
或者
targets : prerequisites ; command
command
、、、
代码学习中的问题和解决过程
****- 问题1:
没有定义printf,无法编译
- 问题1解决方案:
通过vi编辑main.c程序,在前面加入'#include<stdio.h>'即可
- 问题2:
invalid of voidexpression
- 问题2解决方案:
通过vi编辑main.c程序,在前面加入
#include'head.h'
即可
- 问题3:
程序报错
main.c中无head.h文件
- 问题3解决方案:
返回上一级目录,再输入命令行
gcc src/main.c -o src/main lib/libmath.a -I include
,从而生成可执行文件main
- 问题4:
makefile:3: *** missing separator.
- 问题4解决方案:
在make命令后出现这种错误提示,是提示第2行没有分隔符。
例如:
1 target:prerequisites2 command
……
改为:
1 target:prerequisites2 command
……
就可以了。
在Makefile文件中,命令必须以【tab】键开始。
- 问题5:
make: *** No rule to make target 'head.h', needed by 'main.o'。
- 问题5解决方案:
将
head.h
文件移动到src中即可,其实还尝试了在makefile中添加CFALGS来说明head.h
路径,但是仍然报错,后来搜到出错的还可能是多余的空格导致的,于是逐行排查,结果发现仍然有问题,最后选择了移动head.h
文件。
教材每章提问
**** - 问题1:第一章中漫游在计算机系统中如何体现的? - 问题2:计算机的算术运算中如何避免算术溢出,或者如何看待并解决的? - 问题3:什么是缓冲区溢出,如何通过程序在编译器和操作系统的帮助下减轻的? - 问题4:HCL有哪些命令书写要求? - 问题5:c代码如何变换以提升哪些性能? - 问题6:存储层次结构有哪些优势与劣势? - 问题7:如何实现静态库与动态库的生成与调用? - 问题8:异常控制流是如何产生的?异常发生时如何控制? - 问题9:虚拟内存与硬件内存的不同之处? - 问题10:Unix I/O 与Linux I/O 的优势与局限性? - 问题11:如何使用编写实现一个简单Web服务器?需要什么结构? - 问题12:什么是可重入、死锁?线程级编程的具体实现方法?代码
**** [代码托管](https://gitee.com/Sean-Lxs/5226lxs.git) ![](https://img2018.cnblogs.com/blog/1047870/201809/1047870-20180923140406752-164564837.png)其他
**** 新学期,希望自己能多下功夫,做到学以致用。通过这几次测试对C文件处理内容的相关知识有了进一步的认识与掌握,以后再接再励,学到更多知识。学习进度条
****代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 87/100 | 2/2 | 20/20 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:5小时
-
实际学习时间:10小时
-
改进情况: