《信息安全系统设计与实现》第一周学习笔记

《信息安全系统设计与实现》第一周学习笔记

第一章

  • 关于本书
    • 涵盖Unix/Linux的所有基本组件,包括进程管理并发编程定时器时钟服务文件系统网络编程MySQL数据库系统
  • 系统编程的作用
    • 有效利用系统资源来开发应用软件
    • 以便在操作系统、嵌入式系统、数据库系统、数据挖掘、人工智能、计算机网络、网络安全、分布式和并行计算等计算机科学/工程领域继续深造
  • 本书目的
    • 强化学生的编程背景知识
    • 动态数据结构的应用
    • 进程概念和进程管理
    • 并发编程
    • 定时器和定时功能
    • 信号、信号处理和进程间通信
    • 文件系统
    • TCP/IP和网络编程
  • 关于Unix
    • AT&T Unix
    • Berkeley Unix
    • HP Unix
    • IBN Unix
    • Sun Unix

可以看出,大多数Unix系统都是专有的,并且与特定的硬件平台相关联。

  • 关于Linux
    • Debian Linux
    • Ubuntu Linux
    • Linux Mint
    • 基于RPM的Linux
    • Slackware Linux
  • 虚拟机上的Linux
    • VirtualBox
    • VMware
    • Parallels Desktop(我使用的)
  • Ubuntu Linux系统管理
    • 用户账户
      在终端上输入 vi /etc/passwd
    • 添加新用户
      在终端上输入 sudo adduser username,我创建一个名为wq的用户

      可以看到,passwd文件中最后一行多出了叫wq的用户
    • sudo命令

第二章

  • 文本编辑器
    -vim
    • i:插入模式,插入文本

    • a:插入模式,追加文本
      退出插入模式,按ESC。命令模式下,输入“:”进入末行模式,将文本保存为文件或退出vim

    • :w:写入(保存文件)

    • :q:退出vim

    • :wq:保存并退出

    • :q!:不保存更改,强制退出

    • emacs
      以下是我关于使用emacs和gdb工具进行调试的实践过程

      1. 编写源代码

      2.创建makefile(emacs makefile

      3. compile

      4.设置断点

      5. 调试窗口

    • gedit

  • 程序开发步骤
    • 创建源文件
    • 用gcc把源文件转换成二进制可执行文件
    • gcc
      以下是关于程序开发知识点的苏格拉底挑战:




    • 全局变量
    • 局部变量
    • 静态全局变量
    • 非静态全局变量
    • 自动变量
    • 寄存器变量
    • 易失性变量
      以下是关于gcc三个步骤的苏格拉底挑战:



  • 程序执行过程
    在类Unix操作系统中,在sh命令行a.out one two three执行a.out文件,以标记字符串作为命令行参数。
    为执行命令,sh创建一个子进程并等待改子进程终止。子进程运行时,sh使用a.out文件执行新的执行映像
    • 读取a.out文件头
      Total_Size = _brk + stackSize
      e.g main()
    • sh从总大小中分配一个内存区给执行映像
    • sh放弃旧映像,开始执行新映像
    • 执行从crt0.o开始,调用main(),将argc和argv作为参数传递给main(),可以写成
      int main(int argc, char *argv[]){ … }
  • 程序终止
    • 正常终止:如果程序执行成功,main()最终会返回到crt0.out,调用库函数exit(0)(系统调用)来终止进程
    • 异常终止:遇到错误,如无效地址,非法指令,越权等;按下ctrl+C可以产生硬件中断;用kill -s signal_number pid #signal_number=1 to 31向通过pid识别的目标进程发送信号
  • C语言中的函数调用
    • long jump
    • C语言程序与汇编代码的链接
      • gcc生成的汇编代码
        • 入口代码
        • 函数体代码
        • 退出代码
  • 链接库
    • 动态链接库
      gcc -c -fPIC mysum.c
      gcc -shared -o libmylib.so my sum.o
      gcc t.c -L -lmylib
      export LD_LIBRARY_PATH=./
      a.out
    • 静态链接库
      gcc -c mysum.c
      ar rcs libmylib.a mysum.o
      gcc -static t.c -L. -lmylib
      a.out
  • makefile
  • GDB调试工具(实践过程已列出,此处不再赘述)

遇到的问题

vim的插入文本和追加文本有什么区别(即输入i和输入a的区别是什么?)
解答过程

  • GPT:

在vim中,插入文本和追加文本的区别在于光标的位置不同。
当你使用插入文本时,新添加的文本将会插入到光标所在位置之前,而原有的文本将会被移动到插入文本之后。
当你使用追加文本时,新添加的文本将会追加到光标所在位置之后,而原有的文本不会被移动。
你可以使用 i 命令来进入插入模式,在光标所在位置之前添加新的文本;使用 a 命令来进入插入模式,在光标所在位置之后追加新的文本。
随后又去试了一下,解决了这个问题。

  • 模块实践过程
    运行结果和文件路径如下:

    文件已上传:hello
posted @ 2023-09-09 16:36  20211408王其  阅读(76)  评论(0编辑  收藏  举报