首页 > 其他分享 >20211316郭佳昊 《信息安全系统设计与实现(上)》学习笔记1

20211316郭佳昊 《信息安全系统设计与实现(上)》学习笔记1

时间:2023-09-10 19:57:16浏览次数:41  
标签:可执行文件 文件 make 信息安全 编译 20211316 郭佳昊 进程 hello

一、任务要求

  • [ 1 ] 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容 (4分)

我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题

核心是要求GPT:请你以苏格拉底的方式对我进行提问

然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:你的理解(回答)是什么?

如果你觉得差不多了,可以先问问GPT:针对我XXX知识点,我理解了吗?

GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:我的回答结束了,请对我的回答进行评价总结,让它帮你总结一下。

  • [ 2 ] 问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图(3分)

  • [ 3 ] 实践过程截图,代码链接(2分)

  • [ 4 ] 其他(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(1分)

二、知识归纳

  • 第一章

    1. 学习目标
  • 编程背景知识。学会汇编器、编译器、链接器

  • 动态数据结构的应用。理解链表、链队列、链栈、链树等动态数据结构在实践中的用处和使用方式

  • 进程管理。学会创建进程、按优先级调度进程、通过上下文切换运行不同进程等进程操作。

  • 并发编程。学习并行计算和并发编程,了解各种线程同步工具。

  • 定时器和定时功能。学习Unix/Linux中硬件定时器的原理,定时器中断和时钟服务功能。

  • 信号、信号处理和进程间通信。学会Unix/Linux环境下信号、信号处理及进程间通信。

  • 文件系统。了解不同层次的文件操作,实现一个与Linux完全兼容的完整EXT2文件系统。

  • TCP/IP和网络编程。学习TCP/IP协议、套接字API、UDP和TCP套接字编程以及网络计算中CS模型以及HTTP及web编程。

    1. Unix/Linux命令
  • ls:Is dirname:列出CWD 或目录的内容

  • cd dirname:更改目录

  • pwd:打印CWD的绝对路径名

  • touch filename:更改文件名时间戳(如果文件不存在,则创建文件)

  • cat filename:显示文件内容

  • cp src dest:复制文件

  • mv src dest:移动或重命名文件

  • mkdir dirname:创建目录

  • rmdir dirname:移除(空)目录

  • rm filename:移除或删除文件

  • In oldfile newfile:在文件之间创建链接

  • find:搜索文件

  • grep:搜索文件中包含模式的行

  • ssh:登录到远程主机

  • gzipfilename:将文件压缩为gz文件

  • gunzip file.gz:解压gz文件

  • tar -zcvf filetgz.:从当前目录创建压缩tar 文件

  • tar-zxvffiletgz,:从tgz 文件中解压文件

  • man:显示在线手册页

  • zip file.zip filenames:将文件压缩为.zip 文件

  • unzip file.zip:解压.zip 文件

  • 第二章

  1. Linux中的文本编辑器(vim)
  • 操作模式:命令模式(输入命令),插入模式(输入和编辑文本),末行模式(保存文件并退出)

  • 常用命令:h:l:(左右)j:k:(上下)移动光标;i:,a:切换插入模式,esc退出;“;”进入末行模式,w:写入,q:退出,wq:保存退出,q!:强制退出

  1. 程序开发
  • 步骤:创建源文件,用gcc把源文件转换为二进制可执行文件

  • 静态与动态链接:在静态链接中,编译器将程序的所有依赖库(如函数库或其他对象文件)的代码和数据合并到最终的可执行文件中,因此可执行文件包含了所有需要的代码和数据,可以独立运行,不需要外部的库文件支持。但缺点是可执行文件体积较大,且更新库时需要重新编译整个程序。在动态链接中,程序的依赖库仅在运行时加载,而不是在编译时合并到可执行文件中,因此可执行文件较小,而且更新库而无需重新编译程序。缺点是依赖于系统上已安装的共享库,如果共享库版本不兼容,可能会导致运行时出现问题。

  • 可执行文件格式:分为二进制可执行平面文件、a.out文件、ELF可执行文件。a.out文件分为文件头、代码段、数据段、符号表四个部分。文件头包含a.out文件的加载信息和大小,分为tsize、dsize、bsize、total_size四个部分,代码段包含程序的可执行代码,从c语言启动代码crt0.o开始。

  • 程序执行过程:
    1、读取a.out文件头,确定所需总内存大小,包括堆栈空间大小;
    2、sh从总大小中分配一个内存区给执行映像;
    3、sh放弃旧映像,开始执行新映像;
    4、从crt0.o开始,调用main()函数,将argc和argv作为参数传递给main()函数。

  • 程序终止:
    1、正常终止:如果程序执行成功,main()最终会返回到crt0.o,调用库函数exit(0)来终止进程。exit(value)函数会执行一些清理请求,如刷新stdout、关闭I/O流等,然后发出一个_exit(value)系统调用,使进入操作系统内核的进程终止。
    2、异常终止:在执行a.out时,进程可能会遇到如无效地址、非法指令、越权等错误,这些错误会被CPU识别为异常。当某进程遇到异常时,它会陷人操作系统内核。内核的陷入处理程序将陷入错误类型转换为一个幻数,称为信号,将信号传递给进程,使进程终止

  1. gcc
  • 功能:将C源文件先转换为汇编代码文件(.c转换为.s),再将汇编代码转换为目标代码(.s转换为.o),链接(将所有.o文件组合为a.out文件,该文件为二进制可执行文件)

  • 编译选项:命令格式: gcc[选项][文件名]
    -E:仅执行编译预处理
    -S:将C代码转换为汇编代码
    -c:仅执行编译操作,不进行连接操作
    -o:指定生成的输出文件
    -I (大写i):指定头文件目录
    -l:指定程序要链接的库
    -L:指定库文件所在的目录名

  1. gdb
  • 功能:启动程序,设置运行环境和参数来运行指定程序;让程序在指定断点处停止执行;调试程序

  • 常用命令:gdb[选项][参数]
    启动程序:gdb 可执行文件,启动GDB并加载要调试的可执行文件。
    运行程序:run,启动程序的执行。
    设置断点:break 行号 或 b 函数名,在指定的行号或函数上设置断点。
    继续执行:continue 或 c,继续程序的执行,直到下一个断点或程序结束。
    单步执行:step 或 s,逐行单步执行程序,如果遇到函数调用,则进入函数内部。
    跳过函数调用:next 或 n,单步执行程序,但跳过函数内部的代码。
    查看变量值:print 变量名 或 p 变量名,查看指定变量的值。
    观察表达式:display 表达式,持续查看指定表达式的值,直到取消显示。
    查看源代码:list 或 l,查看当前代码上下文的源代码。
    设置 watchpoint:watch 变量名,在变量的值发生改变时触发断点。
    显示:info ,显示各类信息
    分离进程:detach,从已附加的进程中分离GDB。
    退出GDB:quit 或 q,退出GDB调试器。
    查看所有命令:help
    查看某一种类的命令:help

  1. makefile
  • 功能:用于告诉构建系统如何编译和链接源代码

  • 常用命令:
    make:使用 make 命令来构建目标。自动查找名为 Makefile 或 makefile 的文件,并执行其中定义的规则。
    make target:构建指定的目标。
    make clean:清理项目,通常用于删除生成的中间文件、可执行文件和其他临时文件。
    make -n :显示执行 make 命令时要运行的命令,但不实际执行它们。
    make -f filename:使用指定的 Makefile 文件来构建项目。
    make -C directory:切换到指定的目录,然后运行 make 命令,用于在不同的子目录中构建项目。

三、利用chatgpt进行苏格拉底挑战

苏格拉底挑战:

chatgpt判断与总结

四、问题与解决思路

在对1.c进行编译时发现出错,询问chatgpt后了解到是编译预处理时,输入前和输入后文件名一样发生冲突,并了解到冲突的后果

五、实践过程

  • helloworld为例测试gcc编译过程

创建名为hello的c语言文件

gcc -E hello.c -o hello.i 将hello.c预处理为hello.i文件后查看

gcc -S hello.i -o hello.s 将hello.i汇编为hello.s文件后查看

gcc -c hello.s -o hello.o将hello.s编译输出为hello.o文件后查看

用objdump -d命令反汇编查看文件并链接

记忆口诀(ESc,iso)

  • 上课示例

标签:可执行文件,文件,make,信息安全,编译,20211316,郭佳昊,进程,hello
From: https://www.cnblogs.com/GJH6/p/17691639.html

相关文章

  • 20211105李宜时《信息安全系统设计基础》第一周学习总结
    20211105李宜时《信息安全系统设计基础》第一周学习总结老师好,我针对教科书和云班课上面的知识学习了这门课第一章和第二章的知识Linux的一些常用的命令ls:用于列出目录中的文件和子目录。cd:用于改变当前工作目录。pwd:显示当前工作目录的路径。mkdir:创建新的目录。rmdir:删......
  • 《信息安全系统设计与实现》第一周学习笔记
      </d  第一章知识点归纳:1。进程:进程是计算机中正在运行的程序的实例。在操作系统中,每个进程都有自己独立的内存空间和执行环境。进程可以包含一个或多个线程,每个线程执行进程的一部分任务。进程之间是相互独立的,它们通过进程间通信(IPC)来进行数据交换和协调。每个进程......
  • 《信息安全系统设计与实现》第一周学习笔记
    《信息安全系统设计与实现》第一周学习笔记第一章摘要本章介绍了Unix的历史,包括贝尔实验室开发的Unix早期版本以及其他版本。此外,还介绍了Linux的开发及其各种发行版本,列出了适用于Linux的开发的各种硬件平台和虚拟机,并展示了如何将UbuntuLinux同时安装到MicrosoftWindows......
  • 20211421《信息安全系统设计与实现》第一周学习笔记
    知识点总结第一章关于本书研究Unix/Linux系统编程的专著,涵盖Unix/Linux的所有基本组件,包括进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和MySQL数据库系统。本书目标强化学生编程背景知识动态数据结构的应用进程概念和进程管理并发编程定时器和定时功能......
  • 20211314王艺达信息安全系统设计与实现学习笔记(1)
    作业要求链接https://www.mosoteach.cn/web/index.php?c=interaction_homework&m=s_write&clazz_course_id=97072AE7-2C45-11EE-8539-1C34DA7B3F7C&id=F3080EAA-E3B7-414E-B311-938F0B8988F0&order_item=group&status=IN_PRGRS第一章学习总结及自测知识点归纳什么是Unix/Linux......
  • 《信息安全系统设计与实现》第一周学习笔记
    第一章引言关于本书本书是一部研究Unix/Linux系统编程的专注系统编程的作用系统编程是计算机科学和计算机工程教育不可或缺的一部分本书目标强化学生变成背景知识动态数据结构的应用进程概念和进程管理并发编程定时器和定时功能信号、信号处理......
  • 《信息安全系统设计与实现》第一周学习笔记
    《信息安全系统设计与实现》第一周学习笔记第一章关于本书介绍Unix/Linux的功能,着重探讨了编程实践,让学生通过实践来练习系统编程,涵盖Unix/Linux的所有基本组件,包括进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和MySQL数据库系统。系统编程的作用系统编......
  • 信息安全系统设计与实现(上) 学习笔记1(教材1,2章)
    学习笔记1 知识点总结 第一章《Unix/Linux系统编程》教材第一章中介绍了Unix和Linux系统的基本概念以及编程环境的设置,介绍了系统编程的重要性和目标,旨在强化学生的编程背景知识,特别关注动态数据结构、进程管理、并发编程、定时器、信号处理、文件系统、TC......
  • 《信息安全系统设计与实现》第一周学习笔记
    《信息安全系统设计与实现》第一周学习笔记一、知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图第一章关于本书涵盖Unix/Linux的所有基本组件,包括进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和MySQL数据......
  • 虚化及信息安全学习历程--Apple的学习笔记
    一,前言先做了一个基本方向的定义,然后我就开始玩qemu,基于qemu做二次开发。在学习qemu的过程中主要学习hypervisor,然后再学习信息安全相关内容。二,过程记录tbd三,新路历程2023/09/01:开学咯,之前的blog我写了5年,由于不好用,所以我换了blog同时也换了新的学习大方向,正好再来一个5年。 ......