
操作系统
文章平均质量分 88
Akura@lan
咸鱼………
展开
-
ch2 系统调用实验
call sys_call_table(,%eax,4) 之前是一些压栈保护,修改段选择子为内核段,call sys_call_table(,%eax,4) 之后是看看是否需要重新调度。根据汇编寻址方法它实际上是:call sys_call_table + 4 * %eax,其中 eax 中放的是系统调用号,即 __NR_xxxxxx。他俩以及所有 put_fs_xxx() 和 get_fs_xxx() 都是用户空间和内核空间之间的桥梁,在后面的实验中还要经常用到。系统调用与调用自定义函数不一样的是。原创 2023-02-05 23:26:19 · 538 阅读 · 1 评论 -
ch1 操作系统启动
哈工大OSlab原创 2023-01-25 23:57:53 · 1078 阅读 · 0 评论 -
csapp attack lab
准备工作(根据cmu上的write up翻译)文件有:readme.txt:描述了目录下的文件ctarget:代码注入的可执行文件rtarget:返回导向编程的可执行文件cookie.txt:一个8个十六进制数组成的farm.c:一些可以用来打rop的gadget的源码实验都用的ret指令,会返回三个地方:(1)touchx函数 (2)自己写的代码 (3)从farm中得到的gadget所有的输入都是这样一个getbuf()函数:1 unsigned getbuf()2 {3 char原创 2022-02-28 20:49:33 · 234 阅读 · 0 评论 -
csapp bomblab
实验概述实验模拟了一个二进制炸弹,有六个“雷管”,输入正确的字符串就可以拆卸。要进行反汇编和gdb调试 /* Hmm... Six phases must be more secure than one phase! */ input = read_line(); /* Get input */ phase_1(input); /* Run the phase原创 2022-02-05 04:20:19 · 357 阅读 · 0 评论 -
csapp datalab
异或运算int bitXor(int x, int y) { return (~(~x&~y)&~(x&y));}32位最小值int tmin(void) { return 1<<31;}32位最大值int isTmax(int x) { return !(~(x+1)^x)&!!(x+1);}奇数偶数位int allOddBits(int x) { return !((x&0xAAAAAAAA)^0xAAAAAA原创 2022-01-22 23:20:52 · 448 阅读 · 0 评论 -
lab2 物理内存管理
物理内存分布和大小是用bios进行中断调用进行的,而中断调用需要用到bios,bios怎么运用呢?需要在实模式下,也就是bootloader还未加载前使用,BIOS中断获取内存可调用参数为e820h的INT 15h BIOS中断。返回值用di来增长,找到一个个内存的entry,然后用下面结构的缓冲区来保存struct e820map { int nr_map; struct { .原创 2021-10-02 02:11:42 · 426 阅读 · 0 评论 -
lab1 系统启动 bios加载 bootloader加载
启动地址:CS和EIP结合决定启动地址(一开点,cs和eip就设置的值,值决定在哪个地址取指令地址)cs隐含一个base的内容,base为基址,base+eip就是地址,而加电后访问地址的内存是bios,会看到从一开始的地址跳一个很大的地址然后到一个可以访问1M的内存空间去执行(实模式寻址空间为1M)bios做硬件初始化工作,固件加载存储设备的第一个扇区,的512字节到内存的0x7c00.。。。。,同时也跳到这个地址,然后就从0x7c00……开始执行这个bootloader。bios的工作问题,只能加载原创 2021-09-25 01:40:23 · 485 阅读 · 0 评论 -
ucore实验
实验目的了解操作系统开发实验环境熟悉命令行方式的编译、调试工程掌握基于硬件模拟器的调试技术熟悉C语言编程和指针的概念了解X86汇编语言实验概述lab1:硬件层实现,中断等lab2:物理内存管理lab3:虚拟内存管理lab4:内核线程管理,CPU进程、线程管理lab5:用户态进程管理lab6:进程调度,进程运行选择lab7:同步互斥lab8:文件系统...原创 2021-09-07 23:50:46 · 223 阅读 · 0 评论