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

本文总结了2017-2018年度《信息安全系统设计基础》课程的第一周学习内容,涵盖了Linux环境下开发环境的熟悉,包括vi编辑器、gcc编译器和gdb调试技术的使用,以及makefile、静态库和动态库的生成与调用方法。深入探讨了C程序模块化设计的原则,链接的概念,并介绍了如何通过调试技巧解决程序错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

教材学习内容总结

学习目标

  • 熟悉Linux系统下的开发环境
  • 熟悉vi的基本操作
  • 熟悉gcc编译器的基本原理
  • 熟练使用gcc编译器的常用选项
  • 熟练使用gdb调试技术
  • 熟悉makefile基本原理及语法规范
  • 掌握静态库和动态库的生成与调用方法
  • 理解C程序中模块的概仿,模块分解的“高内聚,低耦合”的原则
  • 了解链接的概念

课堂笔记整理及课后实践

2017.09.20

Linux下:

vi hello.c
gcc hello.c
./a.out .表示当前目录
gcc hello.c -o
echo $? 查看程序返回值

od -tx1 hello.c
0060lm7Tly1fjw4jthlb5j30x005idjo.jpg
od -tx2 hello.c
0060lm7Tly1fjw4n8v32yj30wo05g0wt.jpg
od -tc hello.c 查看文件内容
0060lm7Tly1fjw4gmckvzj30w805amyy.jpg
od -tc -tx1 hello.c 查看程序十六进制表示
0060lm7Tly1fjw4odbibmj30yi098gom.jpg
gcc -E hello.c -o hello.i将hello.c预处理为hello.i

vi hello.i
0060lm7Tly1fjw4q1uq2vj310o0rkav5.jpg
gcc -S hello.i -o hello.s将hello.i编译为hello.s

vi hello.s
0060lm7Tly1fjw4r5tginj310a0vq1by.jpg
gcc -c hello.s -o hello.o将hello.s汇编为hello.o

vi hello.o显示乱码:
0060lm7Tly1fjw4rzw35hj313c0gsner.jpg
od -tc hello.o
0060lm7Tly1fjw4t462ohj30wm12a4qc.jpg
objdump -d hello.o将机器码反汇编得到汇编码
0060lm7Tly1fjw4tj6q6ej30xs0fo13d.jpg
ls hello.*

gcc hello.o -o hello将hello.o链接为hello
0060lm7Tly1fjw4ud5rljj30y806kdlh.jpg

  • 巧记:

    E S c

    ↓↓↓

    i s o

程序出错了该如何调试?
  • 终端下用^+shift+T打开三个窗口:
    • Vi
    • gcc
    • gdb
  • vim:

    vi gdbbasic.c

  • gcc:

    gcc gdbbasic.c

    gcc -g gdbbasic.c

  • gdb:

    gdb a.out
  • cgdb:显示代码调试状况

断点
  • 行断点:b 行号
  • 函数断点:b fxx
  • 临时断点:tb
  • 条件断点:b if
  • 命令:
    • C(Continue)从一个断点到下一个断点
    • b设断点
    • r运行
    • s(step)进入函数内部
    • n(next)下一行(直接执行完函数)
    • q(quit)退出
    • p(print)显示值
    • display显示值(只要值变化就显示出来)
    • finish结束循环
    • until执行完循环

教材内容提炼

第一章
  • 信息=位+上下文
  • 程序被其他程序翻译成不同的格式
  • 熟悉编译系统的好处
    • 优化程序性能
    • 理解链接时出现的错误
    • 避免安全漏洞
  • 系统的硬件组成
    • 总线
      • 计算机中总线传送定长的数据,这个定长是,是一个基本的系统参数
    • I/O设备
      • I/O设备可以通过控制器或适配器与I/O总线相连
    • 主存
      • 主存在逻辑上可以看作字节数组
    • 处理器
      • 处理器的存储操作可以从寄存器中复制一个字节的数据到主存中
  • 高速缓存至关重要
  • 存储设备形成层次结构
    • 主要思想:上一层的存储器作为低一层存储器的高速缓存
  • 操作系统管理硬件
    • 操作系统的两个基本功能
      • 防止硬件被失控的应用程序滥用(进程、虚拟内存实现)
      • 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备(文件实现)
    • 进程
      • 实现进程这个抽象概念需要低级硬件和操作系统软件之间的紧密合作
    • 线程
    • 虚拟内存(从低到高)
      • 程序代码和数据
      • 共享库
      • 内核虚拟内存
        • Linux中,内核虚拟内存在虚拟地址空间的高端
    • 文件
  • Amdahl定律
    • Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比(❌)
  • 并发和并行

教材学习中的问题和解决过程

  • 问题1:什么是GCC?
    • GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。
  • 问题2:什么是汇编和反汇编?
    • 汇编(Assembly):把汇编语言翻译成机器语言的过程
    • 反汇编(Disassembly):把目标代码转为汇编代码的过程
  • 问题3:什么是GUI?
    • 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

代码调试中的问题和解决过程

  • 问题1:git add .时报错:fatal: Not a git repository (or any of the parent directories)
    0060lm7Tly1fjw3j5mj0bj30tq01qjss.jpg
  • 解决方案:这是由于本地版本管理仓库被删除了,需要用git init命令重新初始化仓库,建立新的仓库:
    0060lm7Tly1fjw3of6ncdj30yg0720w8.jpg
  • 问题2:git push时报错:fatal: The current branch master has no upstream branch.
    0060lm7Tly1fjw3or1o8vj30z00dm44u.jpg
  • 解决方案:利用git push -u origin master -f命令强制覆盖已有的分支后再push,push成功:
    0060lm7Tly1fjw3oxp7lbj311w0bq440.jpg

代码托管

0060lm7Tly1fjw4x3me7aj30zm11gdwm.jpg

上周考试错题总结

  • Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比(❌)

结对及互评

本周结对学习情况

  • 20155323
  • 结对学习内容
    • 教材第1章 计算机系统漫游

其他(感悟、思考等,可选)

学习进度条

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

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

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

  • 计划学习时间:5小时

  • 实际学习时间:2小时

参考资料

转载于:https://www.cnblogs.com/crazymosquito/p/7588089.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值