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终端
前言之前就对TTY、PTY和PTS等概念比较迷惑,但因为知识储备问题并没有细究。最近刚好看到几篇相关的文章,觉得讲的非常不错,打算整理一下。
终端架构目前Linux中终端的整体架构如下所示
其基本的工作流程如下所示:
终端模拟器(Terminal Emulator)打开/dev/ptmx(pseudo terminal master multiplexer)设备,分配一个可用的ptm(pseudo terminal master)设备的文件描述符。如ptmx_open()所示,Linux内核在打开ptm设备时,也会自动的创建一个pts(pseudo terminal slave)设备,与该ptm一一对应。
终端模拟器fork()子进程。子进程打开之前ptm设备对应的pts设备,并使用dup()将打开的pts设备的文件描述符设备为子进程的标准输入、标准输出和标准错误输出。
子进程执行bash程序。此时,bash和终端模拟器通过伪终端(pty, pseudo terminal)进行通信,即终端模拟器通过ptm设备读取的数据是bash通过pts设备写入的数据,而bash通过pts设备读取 ...
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;而文件系统是解析磁盘数据的方式, ...