首页 > 其他分享 >20211325 2023-2024-1 《信息安全系统设计与实现(上)》第一周学习笔记

20211325 2023-2024-1 《信息安全系统设计与实现(上)》第一周学习笔记

时间:2023-09-09 14:23:56浏览次数:41  
标签:可执行文件 文件 2023 2024 Linux 进程 20211325 main out

20211325 2023-2024-1 《信息安全系统设计与实现(上)》第一周学习笔记

一、任务要求

  • 任务详情
    自学教材第1,2章,提交学习笔记(10分),评分标准如下
    
    1. 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容 (4分)
    
    “我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”
    
    核心是要求GPT:“请你以苏格拉底的方式对我进行提问”
    
    然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
    
    如果你觉得差不多了,可以先问问GPT:“针对我XXX知识点,我理解了吗?”
    
    GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。
    
    
    2. 问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图(3分)
    3.   实践过程截图,代码链接(2分)
    4.    其他(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(1分)

二、知识归纳

第一章

(0)书籍实现目标:

  • 提供高级编程所需背景知识和技能
    了解软件工具、程序开发步骤和程序执行的运行时环境,开发步骤包括汇编器、编译器、链接器、链接库、可执行文件内容、程序执行影响、函数调用约定、参数传递方案、局部变量、栈帧、C程序和汇编代码链接、程序终止和异常处理、Makefile和GDB的使用
    第二周的课堂上老师重点讲解了C程序源代码转换成可执行文件的全过程,这其中第一步是通过gcc -E命令将源代码使用编译器转换成.i文件(预处理),再通过gcc -S命令通过将.i文件转换成.s的汇编程序,之后通过gcc -c命令将.s文件转换成.o的目标文件(二进制机器码),最后用链接器-o将目标文件变为可执行文件。(记忆方法:ESc,iso)
  • 动态数据结构应用
    用二叉树模拟Unix/Linux文件系统树,支持pwd、ls、cd、mkdir等操作。
  • 进程管理
    各种进程的抽象。创建进程、按优先级调度进程、通过上下文切换运行不同进程、通过二叉树维护进程关系、使用sleep和wakeup原语实现等待子进程终止等。进程管理包括fork(),exit(),wait(),exit()等。还包括I/O重定向和管道。
  • 并发编程
    Pthreads编程,线程连接、互斥量、条件变量、信号量、屏障。
  • 定时器和定时功能
  • 信号处理和进程间通信
  • 文件系统
  • TCP/IP和网络编程

(1)Unix发展历史

 
- AT&T Unix
- Berkeley Unix
- HP Unix
- IBM Unix
- Sun Unix

(2)Linux版本

 
- Debian Linux
- Ubuntu Linux
- Linux Mint
- 基于RPM的Linux
- Slackware Linux

(3)虚拟机平台的安装

对于虚拟机延用了大一时使用的VMware平台。

 

(4)Kali Linux的使用

用户登录

根据发过的常用linux命令博客进行简单操作,博客链接为:课上用过的Linux命令 - 娄老师 - 博客园 (cnblogs.co

(5)Ubuntu Linux的使用

第二章

(1)文本编辑器

教材中介绍了vim、gedit以及emacs三种编辑器,我平时用的较多的是VSCode,为更好学习Linux,之后尽量熟练Vin编辑器。

(2)在DebianLinux(Kali)上测试C语言

根据老师上课的示例创建文件夹

 生成类似的结构树

 编写helloworld文件并生成中途会生成的所有文件并附上中间文件内容以及根据上课示例手动编写头文件hello.h

 

 

 按老师提供方法查看最后的可执行文件的(二进制文件)内容

 将中间文件分类放入各文件夹

 最后运行可执行文件

 

最后结果与最开始使用gcc命令一步到位输出可执行文件一致

(3)程序开发步骤分析

  • C语言程序中的变量可分为全局变量、局部变量、自动变量寄存器变量等。
    在大一C语言的课堂上,我们有详细了解过全局变量、局部变量,而在这里我了解到局部变量在默认情况下就是自动变量,编译器试图把寄存器变量存在CPU寄存器中,易失性变量用作内存映射I/O的地址或者通过中断处理程序或多个执行线程来访问的全局变量,易失性关键字可以阻止C编译器优化用这些变量进行操作的代码。
  • gcc三个步骤:将源文件转换为汇编代码(编译),将汇编代码转换成目标代码(汇编),将目标代码转换成二进制可执行文件(链接)
  • .o(汇编)文件包含
    • 一个文件头,包含代码段、数据段和BSS段的大小
    • 一个代码段,包含机器指令
    • 一个数据段,包含初始化全局变量和初始化静态局部变量
    • 一个BSS段,包含未初始化全局变量和未初始化静态局部变量
    • 代码中的指针以及数据和BSS中的偏移量的重定位信息
    • 一个符号表,包含非静态全局变量、函数名称及其属性
  • 静态和动态链接
    在使用静态库的静态链接中,链接器将所有必要的库函数代码和数据纳入a.out文件中。在执行动态链接的a.out文件时,操作系统将a.out文件和共享库均加载到内存中,使加载的库代码在执行期间可供a.out文件访问。
    动态链接的主要优点:可减小每个a.out文件的大小,许多执行程序可在内存中共享相同的库函数,修改苦不需要重新编译源文件。
    动态链接所用的库成为动态链接库(DLL)。它们在Linux中成为共享库(.so文件)。动态加载(DL)库是指仅按需加载的共享库。动态加载库可用作插件和动态加载模块。
  • 可执行文件
    • 二进制可执行平面文件
      包含可执行代码和初始化数据
    • a.out可执行文件
      传统的a.out文件包含文件头(包含文件的加载信息和大小,tsize = 代码段大小,dsize = 数据段大小,bsize = bss段大小,total——size = 加载的a.out文件总大小),然后是代码段(正文段,从标准C启动代码crt0.o开始,改代码调用main()函数)、数据段、bss段、符号表(可选)
      符号“_brk”表示bss段结束。a.out文件的总加载大小通常等于_brk(即tszie+dsize+bsize)。如果需要,_brk可以设置为更高值。
    • ELF可执行文件
      可执行的链接格式文件,包含一个或多个程序段,每个程序段均可可加载至特定的内存地址。在Linux中,默认的二进制可执行文件为ELF文件。

(4)程序执行过程

在类Unix操作系统中,在sh命令行

 
a.out one two three

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

  • 读取a.out文件头

     
      Total_Size = _brk + stackSize
    

    普通的C语言程序将因为任一计算机上的堆栈溢出而产生分段错误(因此操作系统通常使用待启动程序的默认初始堆栈大小)

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

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

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

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

(5)程序终止

  • 正常终止
    如果程序执行成功,main()最终会返回到crt0.out,调用库函数exit(0)来终止进程。
    exit(value)函数会执行一些清理请求,如刷新stdout、关闭I/O流等,然后发出一个_exit(value)系统调用,是进入操作系统内核的进程终止。退出值0通常表示正常终止。如需要,进程也可直接调用exit(value)。再直接一点,进程可能会发出_exit(value)系统调用以立即终止。
    内核中某个进程终止时,会在父进程结构体中将_exit(value)系统调用值记录为退出状态,通知其父进程并使该进程变为僵尸进程,父进程可通过系统调用

     
      pid = wait(int *status);
    

找到僵尸子进程,获得其pid和退出状态,并清空僵尸子进程的结构体,使该结构体可以被另一个进程重新使用。

  • 异常终止
    常见的有无效地址、非法指令、越权等。
    当某进程遇到异常时,它会陷入操作系统内核,内核的陷入处理程序将陷入错误类型转换为一个幻数(即信号。)
    除了错误导致的陷入,信号也可来自硬件或其他进程。
    如“Ctrl+C”组合键会产生硬件中断(向终端上所有进程发送数字2的信号SIGINT),(INT即为Linux中断),或者用户可使用命令

     
      kill -s signal_number pid # signal_number = 1 to 31
    

向pid识别的目标进程发送信号。
对于大多数信号数值,进程的默认操作是终止

(6)C语言背景

  • 进程执行映像

  • CPU中都含有的寄存器(或同等寄存器),括号中条目表示x86CPU寄存器
    • PC(IP):指向CPU要执行的下一条指令
    • SP(SP):指向栈顶
    • FP(BP):指向当前激活函数的栈帧
    • 返回值寄存器(AX):函数返回值的寄存器

在每个C语言程序中,main()函数均由C启动代码crt0.o调用。当crt0.o调用main()时,它将返回地址(当前PC寄存器)压栈,用main()的入口地址替换PC,使CPU进入main()。为了方便,我们按从左到右的顺序显示堆栈内容。当控制权转移到main()函数时,栈顶包含保存的返回PC。
在每个C函数的人口处,编译后的代码都会完成如下功能:

 

 

 但在使用中由于不稳定,因此选择了另一个在本地布置的ChatGPT3.5镜像进行问答训练

 

 

 

 问题2:

 

 

 

 

 

 

 

 

 

标签:可执行文件,文件,2023,2024,Linux,进程,20211325,main,out
From: https://www.cnblogs.com/Garden-of-Avalon/p/17689421.html

相关文章

  • 2023-09-09 微信小程序之引入uni_modules过多插件导致主包体积过大如何解决 ==》hbuil
    前言:uni_modules里面的插件会全部打包在主包里,分包如果都是引用了uni_modules的插件,那么会导致包体积越来越大。我的项目主要用到一些组件库,如uview,对这个库的依赖太严重了,加上是把2个小程序融合到一起,所以对这个库的依赖就会变得更多。解决方案:你的小程序是用uniapp开发,才能使......
  • 地球第三极亮相2023中国服贸会 西藏极净特产登上世界舞台
    来源:珠峰云APP9月2日,2023年中国国际服务贸易交易会(以下简称“服贸会”)在北京正式拉开帷幕。地球第三极以西藏自治区区域公共品牌形象亮相,为全球展商带去众多西藏极净特产,让世界看见西藏好品质。据悉,本届服贸会以“开放引领发展,合作共赢未来”为主题,于9月2日至6日在国家会议......
  • solidworks 2023 SP3.0 安装笔记
    参考文献:Crack自带readme.txthttps://mp.weixin.qq.com/s?__biz=Mzk0NjI3ODE4OQ==&mid=2247592805&idx=1&sn=a8af2a6130ebb82972d2e09df555a90b&chksm=c30bb127f47c3831e9a82129098132c06ba8d083f8cbe0085a293874efdd20ff92434d8d1fcc&scene=21#wechat_redir......
  • Blender官方版下载-Blender下载安装2023最新版 新功能介绍
    Blender中文版是一款非常好用的三维绘画和渲染软件,软件的兼容性非常的强大,可以支持很多不同系统平台的操作,而且软件的大小也不会占据太多的内存,可以在很多不同的平台上使用。软件地址:看置顶贴基本简介Blender是一款免费的开源3D创作套件。它支持整个3D管道建模,装配,动画,模拟,渲染,合成......
  • googlectf2023 gradebook 复现(TOCTOU)
    Gradebook结构根据函数sub_2247开头的部分可以推测出gradebook的结构0x4year0x8gradebookname(32bytes)0x28studentname(32bytes)0x48sizeofthisgradebook(uint)0x50firstgradestructureoffset0x58newgradestructureoffset每一条记录grade......
  • 开发者日记2023年9月9日
    开发者日记2023年9月9日今天星期六我们却是大小周看着外边的人都不上班自己却在这里上班还是挺难受的据说我们老板每周末都玩的很嗨更难受了......
  • 2023.9.9日报
    今天学习了springboot的相关知识,由于自己使用原生的Maven经常出现tomcat配置与hive数据库冲突的问题,因此选择了内置tomcat不需要自己配置也更加先进的springboot确实也该学习一些新的技术不能总是局限于原生的javaweb了 ......
  • 2023年9月8号每日随笔
     今天一天没有课,没有干什么事,上午清理一下c盘内存,下午听了教师节大会,听完就带着电脑去售后准备更新电脑内存,结果不保证数据完全拷贝,因为要重做系统,因为只有一个卡槽,要换内存条,就得把原来的内存条拔出来,加一个新的内存条,在做一个系统,也不是太懂,这次也算了解了一下,不过肯定是要换的......
  • 2023-09-08 小程序之启用组件按需注入 ==》 添加一行代码:"lazyCodeLoading": "require
    在manifest.json文件里面的mp-weix对象添加代码:"lazyCodeLoading":"requiredComponents"可实现组件按需注入,引用官方说法就是:启用按需注入后,小程序仅注入当前访问页面所需的自定义组件和页面代码。未访问的页面、当前页面未声明的自定义组件不会被加载和初始化,对应代码文件将不被......
  • 南京大学计算机拔尖班2023选拔考试乱写
    题目是从这里搬的第一题(20分)在黑板上写有2023个1,下面进行2022次如下操作:擦掉黑板上任意两个数\(a,b\)并写下\(a+b\)或者\(\min\{a^2,b^2\}\),最后只剩下一个数,记这个数字最大可能值为\(r\),求证\(\displaystyle2^{\frac{2023}3}<r<3^{\frac{2023}3}\)【Solution】......