HQOS 设计与实现

“THE MAN WHO CHANGED CHROME” 曾经指出如何学习计算机基础知识:

自己写一个CPU,在自己写的CPU上运行自己写的操作系统,然后用自己写的编译器编译运行一个程序.

于是便有了写一个操作系统的想法.在粗略看完一遍《操作系统真相还原》后,感觉从引导操作系统到实现各种操作系统概念的完整过程工作量有点太大了,暂时还没有那么多时间和精力来完成,便暂且搁置了.

感谢MIT的6.828课程,让我能在有限的时间里一步一步地实现一个操作系统雏形JOS.JOS的开发过程请查看 /学习笔记/6.828分类下的文章.

在接下来的一段时间,我会继续开发扩展该操作系统,并重构目前实现模型中我不太喜欢的实现,就叫它HQOS吧.

本博客记录当前版本HQOS的设计与实现,你可以在github上找到其历史文档及代码实现.
github

阅读更多...

MIT6.828 Lab6

Lab 6: Network Driver

Part A: Initialization and transmitting packets

time

在之前的时钟中断调度前加一个对time_tick函数的调用,注意时钟中断每个CPU都会收到,而我们的目的是计时,所以选择固定选择一个CPU来处理就好,bootcpu当然是最合适的.

1
2
3
4
5
6
case IRQ_OFFSET+IRQ_TIMER:
lapic_eoi();
if(thiscpu==bootcpu)
time_tick();
sched_yield();
return;
阅读更多...

MIT6.828 Lab5

最崩溃的一集…Lab倒是很简单,只是文件系统一启用,之前代码的好多问题都显现出来了,然后就是debugggg.

Lab 5: File system, Spawn and Shell

Getting Started

切换分支之后编译有点问题,改一改:


在GNUmakefile中加上-Wno-address-of-packed-member

将fs.h中定义的全局变量改为外部变量,并在fs.c中定义.

1
2
extern struct Super *super;		// superblock
extern uint32_t *bitmap; // bitmap blocks mapped in memory

改下输出,lab4满分通过.

File system preliminaries

文件系统的设计就不在这里说了,详见《HQOS 设计与实现》.

阅读更多...

中华武数杯2023 WP

最喜欢的高版本堆题,挺有意思的.
所以到底叫上海大师杯还是中华武数杯

randomHeap

glibc2.35堆,保护全开

逆向

程序实现了这样的堆管理结构.初始化时,分配了16个堆管理结构和16个大小为0x28字节的堆块,放入chunk_list和chunk_manager_list.正常情况下这两个结构应该是用户不可见的.

阅读更多...

MIT6.828 Lab4

Lec 9

“Locking”

When we say that a lock protects data, we really mean that the lock protects some
collection of invariants that apply to the data. Invariants are properties of data struc-
tures that are maintained across operations. Typically, an operation’s correct behavior
depends on the invariants being true when the operation begins. The operation may
temporarily violate the invariants but must reestablish them before finishing. For ex-
ample, in the linked list case, the invariant is that list points at the first node in the
list and that each node’s next field points at the next node. The implementation of
insert violates this invariant temporarily: in line 15, l points to the next list element,
but list does not point at l yet (reestablished at line 16). The race condition we ex-
amined above happened because a second CPU executed code that depended on the
list invariants while they were (temporarily) violated. Proper use of a lock ensures that
only one CPU at a time can operate on the data structure in the critical section, so
that no CPU will execute a data structure operation when the data structure’s invari-
ants do not hold.

阅读更多...

词法分析

概念

词法分析

词法分析是编译的第一阶段.词法分析主要任务是读入输入字符,产生记号(token)序列,提交给语法分析使用.
由于这种交互模式,词法分析器可以作为语法分析器的子程序或协作程序.语法分析器每次调用词法分析器持续读入字符,直到识别出下一个记号.

词法分析除了产生记号,也收集记号相关的信息作为记号的属性(比如数字的值,标识符对应的字符串).记号影响语法分析,记号的属性影响记号的翻译.属性一般存储在符号表中.

阅读更多...

Linux内核设计的艺术 阅读笔记

Linux0.11内核.正文部分记录过程,引用部分记录知识点和理解.

main函数之前的功能

加载操作系统

经典流程:
计算机加电设置cs:ip为0xffff0,运行ROM中的BIOS,BIOS初始化中断向量表和一些硬件设备,加载0盘0道1扇区的引导程序bootsect到0x7c00处.bootsect是与操作系统配套的,规划物理内存,加载操作系统,设置根设备为软盘.

Linux0.11要求系统必须存在一个根文件系统,其他文件系统挂接其上.因此Linux的启动需要两部分数据,即系统内核镜像和根文件系统.(kernel pwn中的bzimage和文件系统(比如busybox提供的))

阅读更多...

MIT6.828 Lab3

Lec 7

一些虚拟内存实现的技巧,如延迟分配,写时复制等
https://pdos.csail.mit.edu/6.828/2018/lec/l-usingvm.pdf

Lab3 User Environments

PartA: User Environments and Exception Handling

Creating and Running Environments

创建并初始化envs,env_setup_vm函数为环境e建立一个专属的页目录表,由于在UTOP上的内核空间映射对每个环境都是相同的,所以可以直接拷贝kern_pgdir过来.

阅读更多...

羊城杯2023 复现

heap没出没进线下…

login

qemu-riscv64 -g 2333 ./pwn
gdbinit这样设置方便调试,然后gdb-multiarch -x gdbinit就能调了

1
2
3
4
5
6
7
8
9
10
set arch riscv:rv64
target remote 127.0.0.1:2333
define hook-stop
info reg
echo "\n\n\n\n\n"
x/10i $pc
end

b *0x123457EA
c
阅读更多...
  • Copyrights © 2022-2024 翰青HanQi

请我喝杯咖啡吧~

支付宝
微信