ctf环境配置
前言 为了方便,将CTF的环境配置进行总结,方便日后快速恢复环境等
PWN环境 由于一般PWN题目涉及到各种Glibc版本,这里搭建多个虚拟机,下面给出主要版本下的虚拟机安装
ubuntu16.04 其安装脚本如下所示 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596#!/bin/shset -x# apt mirrorsudo tee /etc/apt/sources.list <<EOFdeb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiversedeb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial m ...
linux内核硬中断分析
前言最近几天的面试刚好问到了内核中断子系统的相关问题,发现自己对这部分了解的不是非常清晰,因此面试后就读了读Linux 6.5-rc6相关代码。结果发现这部分的代码逻辑并不是非常清楚,所以记录下这篇博客,帮助梳理一下Linux内核的x86-64架构的中断子系统的硬中断部分的逻辑,方便以后快速查阅这部分代码细节。
整个内核中断子系统,简单可以分为上半部(硬中断)和下半部。上半部中断可以理解为从CPU被中断到CPU从中断栈中退出的部分,一般处理一些中断任务中非常紧急的工作;其余工作会推迟到下半部中断,包括softirq、tasklet和workqueue等。
这篇文章主要分析上半部中断,也就是硬中断。
整体流程硬件中断整体流程如所示,整体可以分为硬件保存/恢复现场,保存/恢复上下文等步骤。
硬件保存/恢复现场这部分实际上完全是硬件的工作,我们阅读Intel® 64 and IA-32 Architectures Software Developer’s Manual 3A手册的6.12 EXCEPTION AND INTERRUPT HANDLING章节即可。
对于保存现场来说,硬件主要做 ...
xv6-十一
前言这篇博客研究xv6的设备驱动机制
Lab networking本次lab用来实现xv6的E1000(Network Interfact Card)的设备驱动
要求
You’ll use a network device called the E1000 to handle network communication. To xv6 (and the driver you write), the E1000 looks like a real piece of hardware connected to a real Ethernet local area network (LAN). In fact, the E1000 your driver will talk to is an emulation provided by qemu, connected to a LAN that is also emulated by qemu. On this emulated LAN, xv6 (the “guest”) has an IP address of 10.0.2.15. Qe ...
xv6-十
前言这篇博客研究xv6的虚拟内存的管理机制
Lab mmap本次lab用来实现xv6的虚拟内存的管理机制
要求
mmap can be called in many ways, yet this lab requires only a subset of its features relevant to memory-mapping a file. You can assume that addr will always be zero, meaning that the kernel should decide the virtual address at which to map the file. mmap returns that address, or 0xffffffffffffffff if it fails. length is the number of bytes to map; it might not be the same as the file’s length. prot indicates whether the memory should be map ...
分区-文件系统
前言这篇博客主要介绍磁盘中的两个重要概念——文件系统和分区。并通过这些概念,理解grub构建启动盘的原理
分区出于某些原因(如需要多重引导等),磁盘需要被分割成多个独立的分区进行管理
则这些分区信息(被称为分区表)需要被存储在磁盘的固定位置(往往是磁盘起始地址),从而方便其余设备识别分区信息
现在常用的分区表格式有Master Boot Record(MBR)和Globally-Unique-Identifiers Partition Table(gpt)
MBRMBR位于磁盘的第一个扇区中,其基本格式如下所示
GPTGPT位于磁盘的前34个扇区,其基本格式如下所示
可以看到,其兼容MBR
文件系统xv6中有一句经典的描述
文件系统又被称为on-disk数据结构
因此,文件系统中,数据在磁盘上的组织逻辑就是整个文件系统的重点之一,其一般布局如下所示
创建一个文件系统,就是创建该文件系统的诸如superblock等的metadata
分区和文件系统实际上,分区和文件系统的关系并不是非常紧密。分区是解析磁盘的方式,主要解析partition table;而文件系统是解析磁盘数据的方式, ...
xv6-九
前言这篇博客研究xv6的文件系统机制
文件系统总览文件系统是用来管理持久型数据的子系统。由于其需要解决很多问题,所以其抽象层次非常复杂,如下所示
另一方面,文件系统也被称为on-disk data structure,其需要在磁盘中以一定的数据结构进行组织,从而可以让操作系统高效的将文件系统导出到磁盘或从磁盘导入到内存中,如下所示
Disk Layer设计Disk Layer用于抽象对磁盘的读写一般情况下,操作系统通过对磁盘的端口寄存器进行读写,从而完成对磁盘状态的控制和数据的读写。这也就是驱动
由于现实中有各种各样的磁盘,从而需要各种各样的驱动程序。为了隐藏这些实现细节,则通过Disk Layer将其抽象成统一的接口,即名称相同的函数指针在驱动初始化时,将这些指针覆盖为驱动自己的函数。之后调用这些统一的接口,则相当于直接调用这些驱动的函数,从而将不同的驱动实现统一为了相同的接口
实现由于目前xv6仅仅涉及到QEMU的virtio disk设备,因此其仅仅实现了位于kernel/virtio_disk.c的该设备的驱动函数virtio_disk_rw(),并将其当做Disk Layer ...