学习这个问题的原因是想做 pwnable.tw 的 seccomp-tool 一题,此题的 elf 可以读取、模拟、加载用户输入的 bpf 代码,其中加载使用的是 prctl 系统调用,功能号为 PR_GET_SECCOMP。暂时还不知道怎么做,原来觉得应该是通过 bpf 来完成利用,总不会是 elf 某处写渣了的溢出。由于我对 bpf 和 seccomp 不甚了解,所以先花了点时间了解了一...
花了大概一个月的时间,看了 12 章,到 13 章硬盘分区驱动这里实在是看不下去了,遂决定不再看这本书了,对其操作系统的实现也告一段落了,就停留在系统调用这里了。这里简单总结一下这一个半月学到的东西和我(几乎)看完本书后的感受。首先对于每一章基本都有做自己的总结《操作系统真像还原》操作系统实现——MBR《操作系统真像还原》操作系统实现——进入保护模式《操作系统真像还原》操作系统实现——进入分...
到这里,有了前面的铺垫,要说的东西不多,其实没必要单独写出来,但是系统调用毕竟还是比较重要的东西,所以这里还是单独说一下。Linux 下的系统调用占用的是 0x80 号中断,通过 eax 来选择要调用的功能,我们维护一个函数指针数组,存储各个功能的函数指针,然后用一个简单的汇编函数就可以实现调用extern syscall_table section .text global syscall...
硬件生产厂商(Intel)给多进程切换提供了硬件级的解决方案,也就是使用 TSS(Task-Stat Segment),令人遗憾的是由于其效率较低,现代操作系统大多没有使用它来进行进程切换,但是特别的,在特权级转移时的栈切换仍然需要通过它来进行,所以虽然我们不用它来切换进程,也仍然需要设置好它。由于用不到,所以就不说如何用 TSS 来进行任务切换了TSS 的设置将 TSS 抽象为结构体,结构...
关于键盘输入我不想写,就是一个和硬件交互的过程,这里主要还是说一下输入输出缓冲区。代码已经打好 tag,链接,比较重要的就是 ioqueue。获取键盘输入后,可以直接打出到屏幕上,但是这样除了给用户看看之外没有任何的用处,如果想要让输入有效,就必然需要把输入暂存到一个地方,然后让需要从用户读取的线程读取输入,这就需要一个缓冲区来处理这个问题,Dijkstra 提出了一个生产者-消费者模型,基...