首页 > 其他分享 >《信息安全系统设计与实现》第一周学习笔记

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

时间:2022-09-04 19:34:12浏览次数:83  
标签:可执行文件 gcc 第一周 代码 信息安全 笔记 Unix Linux out

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

20201303张奕博

一、任务要求

自学教材第1,2章,提交学习笔记(10分)

  • 知识点归纳以及自己最有收获的内容 (3分)
  • 问题与解决思路(2分)
  • 实践内容与截图,代码链接(3分)
    ...(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(2分)

二、知识总结

第一章

(1)关于本书

  • 系统编程
    系统编程是计算机科学和计算机工程教育不可或缺的一部分,对学习操作系统、嵌入式系统、数据库系统、数据挖掘、人工智能等方面有着重要的作用。
  • 本书目标
    • 强化学生的编程背景知识
    • 动态数据结构的应用
    • 进程概念和进程管理
    • 并发编程
    • 定时器和定时共嗯
    • 信号、信号处理和进程间通信
    • 文件系统
    • TCP/IP和网络编程

(2)关于Unix/Linux

Unix历史发展
  • AT&T Unix
  • Berkeley Unix
  • HP Unix
  • IBM Unix
  • Sun Unix
Linux历史发展
  • Debian Linux
  • Ubuntu Linux
  • Linux Mint
  • 基于RPM的Linux
  • Slackware Linux

(3)虚拟机上的Liunx

  • 下载VMware和ubuntu

  • 一些命令操作
  • sudo command


  • Ubuntn Linux系统管理
    • 用户账户

    • 添加新用户

第二章

文本编辑器

  • vim
    • 命令模式
    • 插入模式
    • 末行模式
  • gedit
  • emacs(比较好用)

使用emacs

我这里遇到了安装问题,目前还没有解决。
使用sudo yum install emacs 之后会有cannot find a valid baseurl for repo的报错
我查找了网络(https://blog.csdn.net/shunzi2016/article/details/83659466)也找到了对应文件,但是没有权限更改

程序开发步骤

(1)创建源文件

  • 全局变量
  • 局部变量
  • 自动变量
  • 寄存器变量
还有易失性变量:用作内存映射I/O的地址或者通过中断处理程序或多个执行线程来访问的全局变量,易失性关键字可以阻止C编译器优化用这些变量进行操作的代码。

(2)gcc把源文件转成二进制可执行文件

gcc三个步骤:
  • 将源文件转换为汇编代码(编译)
  • 将汇编代码转换成目标代码(汇编)
    .o(汇编)文件包含
    • 一个文件头,包含代码段、数据段和BSS段的大小
    • 一个代码段,包含机器指令
    • 一个数据段,包含初始化全局变量和初始化静态局部变量
    • 一个BSS段,包含未初始化全局变量和未初始化静态局部变量
    • 代码中的指针以及数据和BSS中的偏移量的重定位信息
    • 一个符号表,包含非静态全局变量、函数名称及其属性
  • 将目标代码转换成二进制可执行文件(链接)

静态和动态链接

  • 动态链接
    • 可以减小每个a.out文件大小
    • 许多执行程序可以在内存中共享相同库函数
    • 修改库函数不需要重新编译源文件

可执行文件

  • 二进制可执行平面文件
    仅包含可执行代码和初始化数据

  • a.out可执行文件

    • 传统的a.out文件包含文件头(tsize、dsize、bsize、total_size)、代码段、数据段、bss段、符号表
    • 一般情况下,使用 gcc编译器编译 .c/.cpp文件时:
      1、如果直接编译,不加 -o (gcc file1.c) 则其产生的可执行文件默认为 a.out
      2、若加入 -o ( gcc file1.c -o file1.o) 则产生的可执行文件为 file1.o
  • ELF可执行文件
    可执行的链接格式文件,包含一个或多个程序段,每个程序段均可可加载至特定的内存地址。在Linux中,默认的二进制可执行文件为ELF文件。更适合动态链接

程序执行过程

在类Unix操作系统中,在sh命令行a.out one two three执行a.out文件,以标记字符串作为命令行参数。
为执行命令,sh创建一个子进程并等待改子进程终止。子进程运行时,sh使用a.out文件执行新的执行映像

  • 读取a.out文件头
    Total_Size = _brk + stackSize
    e.g main(){main();}

  • sh从总大小中分配一个内存区给执行映像。

  • sh放弃旧映像,开始执行新映像。

  • 执行从crt0.o开始,调用main(),将argc和argv作为参数传递给main(),可以写成

    int main(int argc, char *argv[]){ … }

(5)程序终止

  • 正常终止
    如果程序执行成功,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 mysum.c
    ar rcs libmylib.a mysum.o
    gcc -static t.c -L. -lmylib
    a.out
  • 静态链接库
    -L.指定链接库路径 -l指定链接库
    gcc -c -fPIC mysum.c
    gcc -shared -o libmylib.so mysum.o
    gcc t.c -L. -lmylib
    a.out

makefile

  • make工具是一个程序,它按照顺序读取makefile,以自动有选择的执行编译链接。
    一个make文件由一系列目标项、依赖项和规则组成
  • 当make程序读取makefile时,通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项

GDB调试工具

  • GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。与Window下的IDE不同,GDB是纯命令行执行的,并没有图形界面方法。
  • GDB的常规应用
    • 自定义程序的启动方式(指定影响程序运行的参数)
    • 设置条件断点(在条件满足时暂停程序的执行)
    • 回溯检查导致程序异常结束的原因(Core Dump)
    • 动态改变程序执行流(定位问题的辅助方式)
  • GDB的启动方式
    • 1.gdb
    • 2.gdb test.out
    • 3.gdb test.out core

C语言结构体(参考上学年所学的数据结构)

结构体和指针

类型转换

链表

  • 单项链表

  • 链表遍历

  • 搜索链表

  • 插入

  • 优先级队列(FIFO)

  • 删除操作

  • 循环链表

  • 双向链表

树和二叉树

标签:可执行文件,gcc,第一周,代码,信息安全,笔记,Unix,Linux,out
From: https://www.cnblogs.com/sanfeng-ooo/p/16655656.html

相关文章

  • 第一周总结
    这一周开始了上课,并且说明了下一周周二的时候会有一个开学测试,所以这一周没有怎么学主要是把原来的的东西重新看了一下复习了一下<!DOCTYPEhtml><htmllang="en"><hea......
  • Mybatis学习笔记(二)——Mybatis核心对象
    1.Mybatis核心对象MyBatis有三个基本要素:核心接口和类MyBatis核心配置文件(mybatis-config.xml)SQL映射文件(mapper.xml)1.1核心接口和类每个MyBatis应用程序都以......
  • Flink1.12学习笔记
    一、Flink简介Flink是有状态的流式计算。Flink是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink可以部署在任意地方,Apacheflink是一......
  • Mybatis学习笔记(一)——简介
     1.Mybatis是什么MyBatis是一个开源、轻量级的数据持久化框架,是JDBC和Hibernate的替代方案。MyBatis内部封装了JDBC,简化了加载驱动、创建连接、创建statement......
  • 《Unix/Linux系统编程》第1,2章学习笔记 20201209戴骏
    一.知识点归纳第一章引言1.本书目标编程背景知识详细介绍了程序开发步骤,包括汇报器、编译器、链接器等。动态数据结构的应用字符串标记化、搜索树节点、插入和......
  • OFFCE_WORD笔记
    二级或者三级标题是1而不是1.1怎么改点击段落里面的“多级列表”那个小的倒三角形选中带有“章”字的多级列表就可以啦此时样式这里也会发生变化......
  • Jx.Cms开发笔记(七)-升级BootstrapBlazor到6.9.x
    由于BootstrapBlazor升级到6.9以后的升级还是非常大的,比如图标库升级到了6.1.2,bs升级到了5.2.0。所以这里记录一下升级过程。升级BootstrapBlazor主程序直接升级BootstarpB......
  • 开学第一周周总结
    本周周三开学,学习内容也不太清楚学习了什么,上课记了一些笔记,然后课后有去研究明白。其次是要求总结的内容:之前总计发表博客:137日常学习的内容:110冲刺的内容一共:6杂七......
  • 《Java编程思想》读书笔记(四)
    前言:三年之前就买了《Java编程思想》这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十七章到第十......
  • 外设驱动库开发笔记45:MS4515DO压力传感器驱动
      很多时候我们需要检测流量和压力这些参数,比如我们要检测大气压,或者通过测量差压来获得输送流体的流量等,都需要用到压力传感器。这一篇我们就来讨论MS4515DO压力传感器......