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

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 删除断点
print 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:prerequisites

2 command

……
改为:
1 target:prerequisites

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

  • 改进情况:

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

目录

参考资料

**** - [《深入理解计算机系统V3》学习指导]([http://www.cnblogs.com/rocedu/p/5826467.html])

目录

posted on 2018-09-23 14:05  musea  阅读(230)  评论(0编辑  收藏  举报