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)

目录

其他


新学期,希望自己能多下功夫,做到学以致用。通过这几次测试对C文件处理内容的相关知识有了进一步的认识与掌握,以后再接再励,学到更多知识。

目录

学习进度条


代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 87/100 2/2 20/20

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:5小时

  • 实际学习时间:10小时

  • 改进情况:

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

目录

参考资料


目录

猜你喜欢

转载自www.cnblogs.com/musea/p/9684695.html