2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC).在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC). 寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径.寄存器通常都是以他们可以保存的位元数量来估量,寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组.…
"linux内核分析"的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程. 通用寄存器 AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆栈基址针 SI.DI:变址寄存器 SP:堆栈顶指针 段寄存器 CS:代码段寄存器,指向包含程序指令的段. SS:栈段寄存器,指向包含当前程序栈的段. DS:数据段寄存器,指向包含静态数据或者全局数据段. ES:附加寄存器,指向附加数据段. IP:指令指针.CPU在实际取指令时根据CS:IP来准确定位一个指令.…
本科期间,学校开设过linux相关的课程,当时的学习方式主要以课堂听授为主.虽然老师也提供了相关的学习教材跟参考材料,但是整体学下来感觉收获并不是太大,现在回想起来,主要还是由于自己课下没有及时动手实践.练习与总结.这几天又重新温习了一下实验楼各章节的基础实验课程,发现自己还是有好多基础命令掌握的不太牢固.另外,在参考对比了第一节——linux简介中给出的linux学习路径之后,发现自己之前的学习方式与方法存在很多的不足与弊端,以至于走了一些弯路. 实验楼的linux基础入门(新版)分成十七个小…
1.基础学习内容 1.1 冯诺依曼体系结构 计算机由控制器.运算器.存储器.输入设备.输出设备五部分组成. 1.1.1 冯诺依曼计算机特点 (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中. (2)存储器是按地址访问的线性编址的一维结构,每个单元的位数是固定的. (3)指令由操作码和地址组成.操作码指明本指令的操作类型,地址码指明操作数和地址.操作数本身无数据类型的标志,它的数据类型由操作码确定. (4)通过执行指令直接发出控制信号控制计算机的操作.指令在存储器中按其执行顺序存…
前言 本周对实验楼的Linux基础入门进行了学习,目前学习到实验九完成到挑战二. 学习和实验内容 快速学习了Linux系统的发展历程及其简介,学习了下的变量.用户权限管理.文件打包及压缩.常用命令的和crontab指令. 学习流程图衔接如下: https://graph.baidu.com/thumb/v3/2928286388,1126100969.jpg 简要的学习图 遇到的问题 备份日志 在学习中也不断遇到一些问题.最大的难题在挑战二备份日志中,如何对vim编辑器进行操作就是一个问题.在之…
写之前回看了一遍秒速五厘米:如果…
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂贵,于是他基于MINIX开发了初版的Linux.在之后越来越多的人加入其中,开发Linux. Linux与Windows的不同 Linux: 免费 支持开源自由软件 安全性较强 主要使用命令行 系统可定制 多用户和用户和用户组的规划 Linux学习步骤 Linux初级 Linux系统安装 Linux…
<Linux内核原理与分析>第十三周作业 一.本周内容概述 通过重现缓冲区溢出攻击来理解漏洞 二.本周学习内容 1.实验简介 注意:实验中命令在 xfce 终端中输入,前面有 $ 的内容为在终端输入的命令,$ 号不需要输入.命令上有 # 的内容为注释,不需要输入 适用人群: 有 C 语言基础 会进制转换以及计算 vim 基本使用 熟悉基本 linux 命令 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一…
<Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容: 1.学习<SET-UID程序漏洞实验>的背景和理论知识 1.1 实验简介 Set-UID 是 Unix 系统中的一个重要的安全机制.当一个 Set-UID 程序运行的时候,它被假设为具有拥有者的权限.例如,如果程序的拥有者是root,那么任何人运行这个程序时都会获得程序拥有者的权限.Set-U…
<Linux内核原理与分析>第十一周作业 一.本周内容概述: 学习linux安全防护方面的知识 完成实验楼上的<ShellShock 攻击实验> 二.本周学习内容: 1.学习<ShellShock 攻击实验>的背景和理论知识 1.1 实验简介 2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发.在本实验中,学生需要亲手重现攻击来理解该漏洞,并回答一些问题. 1.2 预备知识 Shellshock,…
<Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二.本周学习内容: 1.阐释linux操作系统的整体构架 宏观上来说,上图很好的反应了Linux操作系统的架构图.首先,Linux系统包含一个内核,内核,实质是一个软件,特殊的地方在于,内核具备直接操纵CPU资源,内存资源,I/O资源等的能力. 内核之外是系统调用.系统调用这层,相当于内核增加了一层封装.将内核…
<Linux内核原理与分析>第八周作业 一.本周内容概述: 理解编译链接的过程和ELF可执行文件格式 编程练习动态链接库的两种使用方式 使用gdb跟踪分析一个execve系统调用内核处理函数sys_execve 二.本周学习内容: 1.理解编译链接的过程和ELF可执行文件格式 ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西.它自最早在 System…
<Linux内核原理与分析>第七周作业 一.本周内容概述: 对Linux系统如何创建一个新进程进行追踪 分析Linux内核创建一个新进程的过程 二.本周学习内容: 1.学习进程的描述 操作系统内核实现操作系统的三大管理功能:进程管理,内核管理和文件系统,其中最核心的功能是进程管理. 在操作系统原理中,我们通过进程控制块PCB描述进程,通常采用一个数据结构struct task_struct来描述进程,其中比较常见的属性如state是进程状态,常见状态有就绪态,运行态和阻塞态. 运行过程如图所示…
<Linux内核原理与分析>第六周作业 一.本周内容概述: 学习系统调用的相关理论知识,并使用库函数API和C代码中嵌入汇编代码两种方式使用getpid()系统调用 学习系统调用system_call的处理过程,在MenuOS中运行getpid命令,通过gdb跟踪调用time函数的过程 分析system_call代码对应的工作过程 二.本周学习内容: 1.实验楼环境研究MenuOS 1.1 在MenuOS中添加并运行getpid命令 进入LinuxKernel目录,删除menu目录,然后从gi…
<Linux内核原理与分析>第五周作业 一.上周问题总结: 虚拟机将c文件汇编成汇编文件时忘记添加include<stdio.h> gdb跟踪汇编过程不熟练 二.本周学习内容: 1.课本学习 1.1 用户态.内核态和中断 内核态:处于高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态,对所有的指令包括特权指令都可以执行. 用户态:处于低的执行级别下,代码只能在级别允许的特定范围内活动.在日常操作下,执行系统调用的方式是通过库函数,库函数封装系统调用,…
<Linux内核原理与分析>第四周作业 一.上周问题总结: 虚拟机环境缺少部分库文件 书本知识使用不够熟练 二.本周学习内容: 1.实验楼环境使用gdb跟踪调试内核 1.1 在该环境下输入如下命令启动menuos: cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 实践截图如下: 1.2 使用gdb跟踪调试内核 qemu -kernel linux-3.18.6/arch/x86…
<Linux内核原理与分析>第三周作业 一.上周问题总结: 第二周头脑风暴完成较慢 虚拟机libc配置错误 书本知识使用不够熟练 二.本周学习内容: 1.实验楼环境虚拟一个x86的CPU硬件平台 在该环境下输入如下命令: cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 实践截图如下: QEMU窗口截图如下: 查看mymain.c: 查看myinterrupt.c: 2.实验楼环境完成一个简单的时间片轮转机制内核: 代码…
<Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解牛Linux内核分析>第一章 2.1 汇编语言的学习与实践 汇编语言, 即第二代计算机语言,用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用"ADD"代表数字逻辑上的加减," MOV"代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者…
20169212<Linux内核原理与分析>课程总结 每周作业链接汇总 第一周作业:完成linux基础入门实验,了解一些基础的命令操作. 第二周作业:学习MOOC课程--计算机是如何工作的:完成实验楼上配套实验一,反汇编一个简单的C程序,分析堆栈变化情况:阅读学习教材<Linux内核设计与实现>第1,2,18章内容. 第三周作业:使用自己的ubuntu按照书进行基本实验,遇到的一些问题及解决. 第四周作业:学习MOOC课程--操作系统是如何工作的:完成实验楼上配套实验二,使用自己的…
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资料,看看别人的解答,慢慢的也就理解了,最终形成自己的知识脉络. 实验分析 先创建文件,通过vim将C代码写到文件中去,如图. 再编译成可执行程序和反编译成汇编代码.为什么反编译是这个代码呢? gcc -S -o main.s main.c 原来gcc命令中 -S 参数表示仅仅汇编而不进行编译及链接,也就是将源…
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第一部分 本部分主要是观看孟老师的学习视频,学习计算机是如何工作的,并根据提示完成实验. 寄存器 通用寄存器: AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆栈基址针 SI.DI:变址寄存器 SP:堆栈顶指针 段寄存器: CS:代码段寄存器,指向包含程序指令的段. SS:栈段寄存…
2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(): 2.内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度: 3…
2018-2019-1 20189221 <Linux内核原理与分析>第八周作业 实验七 编译链接过程 gcc –e –o hello.cpp hello.c / gcc -x cpp-output -S -o hello.s hello.cpp gcc -x assembler -c hello.s -o hello.o-m32 gcc -o hello hello.o 娄老师在第一次讲课时很生动的使用:"E->S->C"与"I->S->…
2018-2019-1 20189221 <Linux内核原理与分析>第七周作业 实验六 分析Linux内核创建一个新进程的过程 代码分析 task_struct: struct task_struct { volatile long state; //进程状态/* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; // 指定进程内核堆栈 pid_t pid; //进程标识符 unsigned int rt_priority; /…
2018-2019-1 20189221 <Linux内核原理与分析>第六周作业 实验五 实验过程 将Fork函数移植到Linux的MenuOS fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程.在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程.在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID.通过fork返回的值来判断当前进程是子进程还是父进程. 启动MenuOS: 在test.c中添加代码如下: int…
2018-2019-1 20189221<Linux内核原理与分析>第五周作业 实验四 实验过程 当用户态进程调用一个系统调用时,cpu切换到内核态并开始执行一个内核函数. 在Linux中是通过int $0x80来执行系统调用的,这条汇编指令产生向量为128的编程异常 传参:内核实现了很多不同的系统调用,进程必须指明需要哪个系统调用,这需要传递一个名为系统调用号的参数(使用eax寄存器) 系统调用也需要输入输出参数,例如:实际的值.用户态进程地址空间的变量的地址.包含指向用户态函数的指针的数据…
2018-2019-1 20189221<Linux内核原理与分析>第四周作业 教材学习:<庖丁解牛Linux内核分析> 第 3 章 MenuOS的构造 计算机三大法宝:存储程序计算机,函数调用堆栈,中断 操作系统两把宝剑:中断上下文,进程上下文 Linux内核源代码: Linux内核使用的是第二周时下载的Linux-2.6版本 Linux内核目录: init目录下的main.c函数: start_kernel(): init_task(): rest_init(): 随书学习很有…
2018-2019-1 20189221<Linux内核原理与分析>第三周作业 实验二 完成一个简单的时间片轮转多道程序内核代码 实验过程 在实验楼中编译内核 编写mymain.c函数和myinterrupt.c函数实现时间片轮转调用 mymain.c: myinterrupt.c: make: 内核实现: 代码分析 代码使用的是<庖丁解牛Linux内核分析>书中代码: mypcb.h:定义了PCB结构体 #define MAX_TASK_NUM 4 #define KERNEL_…
第一周作业::对Linux的基本知识进行了了解,并对基本操作进行熟悉和应用. 第二周作业::了解了冯诺依曼体系结构.各种寄存器的功能和汇编指令的作用和功能. 第三周作业::这周主要了解了Linux系统的架构,熟悉了常用的一些命令. 第四周作业::模拟了系统中的时钟中断. 第五周作业:::调试Linux内核,观察系统中代码的执行过程. 第六周作业::了解系统调用,并写一个C语言的代码嵌入系统调用命令. 第七周作业::将写好的系统调用程序部署到menu os上. 第八周作业::了解进程的执行和切换,…
第一周作业:linux入门学习:熟悉操作linux的基础命令 第二周作业:实验反汇编一个简答的C程序,学习汇编代码的工作过程 第三周作业:学习linux内核的启动过程 第四周作业:学习linux内核进程相关的知识,实验学习时间片轮转多道程序原理 第五周作业:学习使用GDB调试跟踪内核的启动过程 第六周作业:学习linux系统调用相关的知识并进行实验操作分析 第七周作业:实验分析学习Linux内核创建一个新进程的过程 第八周作业:学习linux内核定时器及内存管理 第九周作业:学习总结Linux内…