ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-09-04 19:31:06  阅读:211  来源: 互联网

标签:可执行文件 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
来源: https://www.cnblogs.com/sanfeng-ooo/p/16655656.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有