MIT-6.S081导言 MIT-6.S081已完成: Preparation Lab1 Xv6 and Unix utilities Lab2 syscall System calls Lab3 page table Preparation这部分比较麻烦,需要我们配置xv6的编译、调试环境、安装编译链等,由于GFW的原因,这个阶段会比较egg pain。比如: 需要在x64机器上生成riscv的可执行文件, 1970-01-01 MIT6S081
SEED-lab 课程概览 GitHub仓库链接:https://github.com/LaPhilosophie/seedlab计算机自学指南链接:SU SEED Labs - CS自学指南 当你做完seedlab的那天,一切都将作废。你的本科作废,你的专业作废,星星作废,月亮作废,银河系作废,宇宙作废,你的爱作废,你的恨作废,你的前半生作废,你的现女友作废。悬梁五年苦学seed,大雪深埋垃圾本科! seedlabS 1970-01-01 SEED-lab
CSAPP-lab 学 CSAPP 不做实验,就像四大名著不看红楼梦,说明这个人文学造诣和自我修养不足,他理解不了这种内在的阳春白雪的高雅艺术,他只能看到外表的辞藻堆砌,参不透其中深奥的精神内核,他整个人的层次就卡在这里了,只能度过一个相对失败的人生。 lab setup csapp 课程网站 CS:APP3e Student Site lab 主页 在主页获取到handout后,解压: 1tar xvf 1970-01-01 CSAPP
一个基于 LKM 的 Linux 内核级 rootkit 的实现 GitHub链接 演示Slides overviewrootkit是一种恶意软件,攻击者可以在获得 root 或管理员权限后安装它,从而隐藏入侵并保持root权限访问。rootkit可以是用户级的,也可以是内核级的。关于rootkit的详细介绍可以参考https://en.wikipedia.org/wiki/rootkit 有许多技术可以实现rootkit,本项目使用的是通过编写LKM(Linu 1970-01-01 Linux
hexo博客配置 all in one 本文记录了我基于hexo构建的博客的一些配置 博客迁移、多设备写作安装 hexo12345brew install gitbrew install nodenpm install -g hexo-cli 下载nodejs 建议使用scoop下载 使用npm下载hexo npm install -g hexo-cli 命令行进入到C:\hexo目录 12hexo n "&q 1970-01-01 #hexo
CSAPP-lab:shell lab overview此次实验的目的是做一个tiny shell,实现的tsh有以下要求: 提示符应该是字符串“ tsh >” 用户键入的命令行应该由一个名称和零个或多个参数组成,所有这些参数都由一个或多个空格隔开。如果 name 是一个内置命令,那么 tsh 应该立即处理它并等待下一个命令行。否则,tsh 应该假定 name 是一个可执行文件的路径,它在初始子进程的上下文中加载和运行该文件(在 1970-01-01 CSAPP
CSAPP-lab:malloc lab lab说明 下面是对lab说明文档的总结 评测在malloclab-handout.tar发行版中的驱动程序mdriver.c将测试mm.c包的正确性、空间利用率和吞吐量。驱动程序由一组跟踪文件控制,这些文件包含在malloclab-handout.tar分发版中。每个跟踪文件都包含一系列分配、重新分配和释放指令,指示驱动程序以某种顺序调用您的mm_malloc、mm_realloc和mm_fr 1970-01-01 CSAPP
CSAPP:程序的机器级表示-3 思考两个问题: 控制结构相对应的机器语言的控制结构(汇编语言) C语言实现的分支、循环、开关等操作,在底层的机器语言是如何实现的? 条件码的隐式赋值几种标志寄存器 CF 进位标志位(Carry Flag, 无符号数) SF 符号标志识位(Sign Flag, 有符号数) ZF 零标志位 ( Zero Flag ) OF 溢出标志位( Overflow Flag , 有符号数) add指 1970-01-01 CSAPP #操作系统,csapp
CSAPP:程序的机器级表示-4 函数调用栈栈的布局 由高地址向低地址增长 栈帧结构的两端由两个指针来指定 栈指针:%rsp,指向栈顶,地址更高 桢指针:%rbp,指向栈底,地址更低 出栈入栈 pushq Src 从Src取操作数 将%rsp减8 将操作数写到%rsp指向的地址 popq Dst 从%rsp中保存的地址值读取数值 将 %rsp加 8 将数值保存到Dst (必须是寄存器) 过程控制 A函数调用B函数 1970-01-01 CSAPP #操作系统,csapp
程序的生命周期:从.c文件到二进制文件 一个.c文件是如何成为一个可执行二进制文件的? 文件后缀 被执行过程 工具 细节 .c 预处理 预处理器(cpp,c pre-processor) 宏替换、头文件展开、注释删除 .i 编译 ccl C语言程序转化为汇编语言程序(.s) .s 汇编 编译器 汇编语言程序转化可重定位目标文件(.o) .o 链接 ld(链接器) 将多个.o文件链接为一个可执行文件 预处理使用 1970-01-01 CSAPP
C语言:作用域规则 全局变量 在整个程序生命周期内都是有效的 在任意的函数内部能访问全局变量 系统会自动对全局变量初始化 保存在内存的全局存储区中,占用静态的存储单元 数据类型 初始化默认值 int 0 char ‘\0’ float 0 double 0 pointer NULL 局部变量 在某个函数或块的内部声明的变量 只能被该函数或该代码块内部的语句使用 保存在栈中 作用域 1970-01-01 C语言 #C语言
CSAPP:程序的机器级表示-1 指令集架构 Instruction Set Architecture,ISA 复杂指令集(Complex Instruction Set Computer) 包含许多应用程序中很少使用的特定指令 x86 精简指令集(Reduced Instruction Set Computer) 包含的指令少 提供比较高的速度 处理器的尺寸更小, 以及较少的电力损耗 ARM、MIPS 机器语言 机器码 1970-01-01 CSAPP #操作系统,csapp
CSAPP:程序的机器级表示-2 程序员视角 程序计数器(Program counter,PC ) CS:IP EIP RIP 寄存器(Register) 条件码(Condition codes) 存储最近的算术或逻辑运算的状态信息 用于条件分支 内存(Memory) 可按字节寻址的数组(内存就是个大数组) 程序和数据 栈(Stack,用于函数调用过程的实现) 几种常见的寻址方式寄存器间接寻址1movq (%rcx) 1970-01-01 CSAPP #操作系统,csapp
C语言:复杂指针声明 前言指针是一种保存变量地址的变量,简单指针容易分析,但是当指针稍微复杂,就很容易无从下手,比如: 1char *(*(**foo[][8])())[]; 普通指针12345678910111213#include <cstdio>#include <iostream>using namespace std;int main() { int a = 1; 1970-01-01 C语言 #C语言,指针
C语言:预处理与宏定义详解 预处理的步骤C编译器做语法解析之前的预处理步骤: 对define语句进行替换 \可以把分行的代码连接成一行 将注释替换为一个空格 宏可被\分割 #define STR “hello, “ \ “world” #define MAIN \ int main() \ { \ return 0 1970-01-01 C语言 #C语言
C语言:结构体 定义123456struct point{ int x; int y;}p1,p2;struct point p3; struct 后跟的point称为结构标记,这种标识符在C语言中称为Tag struct声明定义了一种数据类型,可以将自定义的标识符声明为指定类型的变量,这里p1,p2都是point类型 如果在定义结构体类型的同时定义了变量,也可以不必写Tag,但这样就没 1970-01-01 C语言 #C语言
Hardware and Software Support for Virtualization 学习笔记 1 定义本章介绍了虚拟化、虚拟机和虚拟机监视器的基本概念,因为各种文章、教科书和商业产品描述有时会使用相互冲突的定义。 虚拟化是通过强制模块化应用分层原则,即公开的虚拟资源与被虚拟化的底层物理资源相同。 虚拟机是一个完整的计算环境的抽象,通过对计算机的处理器、内存和 I/O 组件进行组合虚拟化。 hypervisor 是一个管理和运行虚拟机的专用系统软件。 虚拟机监视器(VMM)是指管理程序中专 1970-01-01