Blog
Essays, opinions and notes.
- 2026-09-30 Hello, CAPTAINAI The site is now live.
- 2026-09-23 Linux内核分析之安全模块-04 56.1 Seccomp 原理 —— strict 模式与 filter 模式 seccomp 有两代: strict 模式 (一代,只有 read/write/exit/sigreturn 四个调用可用,违约 SIGKILL)与 filter 模式 (二代,用户态提交 cBPF 过滤器按调用号/参数裁决)。共同的不变式是 单向门 :一旦启用不能关闭(除非 …
- 2026-09-23 Linux内核分析之安全模块-03 55.1 Linux Capability 机制详解 Capability 把 root 的"全部权限"拆成编号的能力位(kernel cap t 是两个 64 位字的位图,52.3.1 节),分布在 cred 的五个集合中,exec 时按一组确定性规则计算新集合。本节解剖位表、五集合语义与 exec 计算式。 --- 55.1.1 能力位表与五集合 55.…
- 2026-09-23 Linux内核分析之安全模块-02 54.1 AppArmor 配置文件模型 AppArmor 的策略单元是 profile :绑定到可执行路径(或通过 change profile 显式进入),内部是一组"路径 glob + 权限字母"的允许规则,外加能力清单与网络/信号约束。两种模式(enforce/complain)决定违规的后果。本节解剖 profile 的语法与生命周期。 --- 5…
- 2026-09-23 Linux内核分析之安全模块-01 53.1 SELinux 策略模型 —— TE、RBAC、MCS SELinux 的策略模型由三层组成: 类型强制(TE) 是核心——"源类型对目标类型的类是否有权限"; RBAC (角色)约束"哪些角色能进哪些域"; MCS/M LS (多级/类别安全)做敏感性分级(容器用 MCS 隔离)。本节用一次实际判定解剖三层。 --- 53.1.1 安全上下文的四…
- 2026-09-23 Linux内核分析之虚拟化-02 51.1 virtio 规范与 virtqueue virtio 是"为虚拟化而生"的设备标准:客户机与宿主约定一套 共享内存的环形队列协议 (virtqueue),客户驱动填描述符、宿主后端消费,通知走最低成本的路径(共享内存标志或单次 MMIO)。它消灭了"模拟真实硬件"(模拟一个 e1000 意味着每包都走真实网卡的寄存器协议)的低效,是半虚拟化 I/…
- 2026-09-23 Linux内核分析之虚拟化-01 50.1 x86 VT-x / AMD-V 扩展 VT-x(Intel)与 AMD-V(SVM)是 x86 硬件虚拟化的两大扩展:新增一个"非根模式"(客户机运行态),敏感操作触发 VM-Exit 回根模式(宿主内核),VMCS/VMCB 保存双态上下文。两者语义同构而编码各异。本节解剖 VT-x 的模式模型、控制位体系与 AMD-SVM 的对照,以及 KV…
- 2026-09-23 Linux内核分析之网络协议栈-04 48.1 Netlink 协议族与消息格式 Netlink 是内核与用户态之间的"双工消息总线":一个 socket 族(AF NETLINK,按 NETLINK 子协议再分)、一套 TLV 消息格式(nlmsghdr + nlattr)、单播/多播两种投递。 ip/ss/conntrack 的一切配置查询、udev 设备事件(39.1.3 节)、路由变化通…
- 2026-09-23 Linux内核分析之网络协议栈-03 47.1 Netfilter 钩子与 hook 点 Netfilter 框架本体极小:五个钩子点 + 一个注册接口 + 一个执行器,其余一切(NAT、过滤、跟踪)都是钩子消费者。框架的工程精华在于 无规则时近乎零成本 (static branch 短路)与 同点多钩子的优先级协议 。本节解剖框架与裁决协议。 --- 47.1.1 五个钩子点:位置即语义 47…
- 2026-09-23 Linux内核分析之网络协议栈-02 46.1 IP 层 —— 路由与分片 IP 层的职责是"把包送到该去的地方":入口校验 → 路由决策(本地交付/转发/丢弃)→ 交付或转发,途中处理分片重组与 netfilter 穿越。它的两个核心产物—— skb dst (路由缓存条目)与邻居表——不仅是转发的依据,也是本机 TCP 发包的参数来源。本节解剖收包骨架、路由结构与分片机制。 --- 46.1…
- 2026-09-23 Linux内核分析之网络协议栈-01 45.1 socket 系统调用与 sock 结构 socket 系统调用的每一员都是"薄翻译":进程的 fd 背后是 struct socket (VFS 壳,sockfs 内部文件系统的 inode),壳内挂着 struct sock (协议本体,TCP/UDP/Unix 各有扩展)。两者之间由 proto ops 操作表连接——POSIX 语义到协议实…
- 2026-09-23 Linux内核分析之设备驱动-04 43.1 DMA 原理与 DMA 映射 DMA 的本质是"设备用 bus 地址访问内存",而内核必须负责三件事: 地址翻译 (虚拟→物理→bus,含 IOMMU 编址)、 缓存一致性 (CPU 缓存与设备视图的同步)、 访问授权 (IOMMU 页表给设备开权限)。本节建立翻译观与方向语义。 --- 43.1.1 三种地址与翻译链 为什么驱动必须经 API 而…
- 2026-09-23 Linux内核分析之设备驱动-03 42.1 硬件中断处理 —— 上半部 硬中断处理程序(上半部)运行在内核最严苛的上下文:抢占全关、不可睡眠、随时打断任何代码。它的职责因此被压缩为一件事—— 尽快告知内核"事件来了",把工作移交延迟层 。本节解剖注册接口与上下文约束。 --- 42.1.1 注册与返回值协议 dev id 是共享中断的身份证 :同一条线的每个注册者带自己的实例指针,触发时链上…
- 2026-09-23 Linux内核分析之设备驱动-02 41.1 块设备注册与 gendisk 块驱动的注册是"声明式"的:填一张 blk mq tag set (多少硬件队列、多深的池、什么回调),core 据此建全部队列与标签池;再 blk mq alloc disk 取 gendisk、 add disk 上线。本节解剖这张声明表。 --- 41.1.1 tag set:驱动的能力声明 cmd size 是…
- 2026-09-23 Linux内核分析之设备驱动-01 40.1 字符设备注册 —— register chrdev 字符设备注册 = 拿一块设备号区间 + 挂一个 cdev(携带 file operations)。老式一步接口与新式两级接口并存,cdev 本身是个 kobject——39 章的模型在此落地。 --- 40.1.1 设备号与两级注册 40.1.2 cdev:行为本体 owner 字段的生命周期 是…
- 2026-09-23 Linux内核分析之文件系统-05 38.1 OverlayFS 原理与层次结构 OverlayFS 的挂载参数只有三个: lowerdir= (可多个逗号分隔)、 upperdir= (恰好一个)、 workdir= (与 upper 同文件系统的工作目录)。合并视图的语义由这套参数严格推导: 多层只读底本 + 单层可写覆盖 + 事务辅助目录 。本节拆解层模型与合并规则。 --- 38.1.…
- 2026-09-23 Linux内核分析之文件系统-04 37.1 /proc 文件系统 —— 进程与内核信息 procfs 把"每进程的内核账本"( /proc/ / )与"系统杂项"( /proc/sys 、 /proc/meminfo …)暴露为文件。它的独特基础设施是 按需合成 :目录内容随进程生灭动态枚举,文件内容在 read 时由回调生成。本节拆解其节点模型与 proc ops。 --- 37.1.1 …
- 2026-09-23 Linux内核分析之文件系统-03 36.1 页缓存 (Page Cache) —— address space address space 把"文件的页缓存视图"形式化:以 XArray 保存"文件偏移 → folio"的映射,以三个标记位维护脏/回写状态,以 a ops 把"这页缺了谁去供货"多态到具体文件系统。read/write/mmap/共享内存全部经此一仓。本节拆解容器、索引与读路…
- 2026-09-23 Linux内核分析之文件系统-02 35.1 块设备层架构 —— request queue 与 bio 块层的三个核心对象分工清晰: gendisk 是设备在内核的身份卡、 request queue 是它的排队车间、 bio 是一张 I/O 工单。本节拆解三者与提交路径的检查序列。 --- 35.1.1 gendisk 与 request queue gendisk 是驱动向块层注册的设备…
- 2026-09-23 Linux内核分析之文件系统-01 34.1 Ext4 磁盘布局 —— 块组、inode 表与日志 ext4 的磁盘组织围绕"块组"展开:把整个设备切成若干自包含单元,每组内含自己的位图与 inode 表,使"一个文件的 inode 与数据邻近、并发分配互不干扰"。超级块与组描述符经 sparse super / flex bg 特性稀疏化与聚簇。本节解剖磁盘布局与挂载时的解析。 --- 34…
- 2026-09-23 Linux内核分析之进程间通信-06 32.1 eventfd —— 事件通知机制 eventfd 把"一个事件发生了"压缩成 8 个字节的计数器加一个等待队列——它是 epoll 生态里最小的积木:线程池唤醒、io uring 完成通知(37 章)、QEMU 主循环、DMA 完成回调(virtio,51 章)都以它为终结点。本节拆解计数语义、读写路径与内核侧 API。 --- 32.1.1 e…
- 2026-09-23 Linux内核分析之进程间通信-05 31.1 futex 原理 —— 快速用户空间互斥 futex 的全部设计围绕一个问题: 内核如何为"用户内存里的一个字"提供睡眠/唤醒服务,却不知道任何锁语义? 答案是三层抽象:用户内存字是锁状态、futex 键是队列身份、哈希桶是队列容器。本节拆解这三层与私有/共享键的语义。 --- 31.1.1 分界线:值在用户、队列在内核 "零竞争零系统调用" 的收…
- 2026-09-23 Linux内核分析之进程间通信-04 30.1 POSIX 共享内存 (shm open) POSIX 共享内存把 28.4 节的内核事实——"共享内存就是 tmpfs 文件"——直接暴露为文件系统对象: shm open("/data") 在 /dev/shm/ 下创建/打开一个真实文件,之后 ftruncate 定大小、 mmap 映射使用。生命周期由 引用计数 而非 IPC RMID 管理…
- 2026-09-23 Linux内核分析之进程间通信-03 29.1 POSIX 消息队列与 mqueue 文件系统 POSIX 消息队列把消息语义嫁接到 fd 世界: mq open 返回的 mqd 可被 poll/epoll/close 处理, mq notify 提供三件套中唯一的主动通知。实现上队列本体是 mqfs 内部文件系统的 inode,消息按优先级组织成红黑树,收发快路径以 pipelined 指针移…
- 2026-09-23 Linux内核分析之进程间通信-02 28.1 System V IPC 通用机制 —— ipc ids 与 kern ipc perm 信号量/消息队列/共享内存三个子系统共享一个对象管理层:每 IPC namespace 一份 ipc ids 3 ,每个 IPC 对象以 kern ipc perm 开头(权限/属主/键/序号)。这一层解决三件所有 SysV IPC 都需要的事: key→id…
- 2026-09-23 Linux内核分析之进程间通信-01 27.1 信号处理全链路 信号最具欺骗性的地方在于: kill() 返回时什么都没发生,handler 却"稍后"执行了。本节沿时间轴把这个"稍后"拆开——信号从挂起集到 handler 入口要经过 返回用户态边界 这道唯一的闸门,而系统调用重启语义是这道闸门上最精巧的协商机制。 --- 27.1.1 时间轴:为什么不立即投递 为什么必须等边界 :内核态代码…
- 2026-09-23 Linux内核分析之内存管理-07 25.1 缺页异常入口 —— x86 64 do page fault x86 把缺页叫 PF(向量 14),是内核能收到的信息最丰富的异常:CR2 给出故障地址,错误码给出故障性质,IDTENTRY 框架给出被中断上下文。入口代码的使命是把这三份信息翻译成"一个安全的问题"再交给通用层——每一步过滤都在防止恶意构造的异常打穿内核。本节沿 7.0 的实际入口…
- 2026-09-23 Linux内核分析之内存管理-06 24.1 LRU 链表与页面老化 回收的本质是预测:哪一页未来最不可能被访问?内核的回答是把所有可回收页组织成 按访问时间排序的链表 ,从最老端摘取。7.0 提供两套实现:传统 active/inactive 二链(64 位下仍可选用)与默认的 MGLRU (multi-gen LRU)——用"世代"把"多久没用"量化成序号,避免二链在巨型内存上的全表扫描。…
- 2026-09-23 Linux内核分析之内存管理-05 23.1 大页原理 —— 减少 TLB 失配 大页的收益常被粗略表述为"TLB 命中率高",本节用三组算式把收益拆开: TLB 覆盖倍增 (同样条目数覆盖 512 倍地址)、 页表遍历减负 (中间层级消失)、 缺页次数均摊 (一次供货覆盖 512 个 4KB 单元),并逐项指出对应的成本(分配原子性、分裂搬运、碎片放大、迁移负担)。理解收益边界才能回答"何时…
- 2026-09-23 Linux内核分析之内存管理-04 22.1 用户地址空间布局 —— mmap 与栈 每个进程一出生,内核就为它的用户半区规划了"城市规划图":哪里放代码与数据、哪里允许堆向上长、mmap 区从哪个边界向哪头分配、栈顶在哪。规划的核心参数是 mm- mmap base (mmap 区边界)与布局模式(top-down 或 legacy),两者由架构代码 arch pick mmap layou…
- 2026-09-23 Linux内核分析之内存管理-03 21.1 SLAB/SLUB/SLOB 三代分配器 内核对象分配器的第一版 SLAB 出现于 1996 年,其设计直接借鉴 Solaris 的 Jeff Bonwick 论文;随后 SLOB 与 SLUB 相继加入,三种实现长期以编译期互斥的方式并存,由同一套 kmem cache API 统一供给上层。演进到 7.0,主干只剩 SLUB——本树 mm/Kc…
- 2026-09-23 Linux内核分析之内存管理-02 20.1 内核虚拟地址空间划分 64 位虚拟地址是一把双刃剑:2^64 字节的空间远超任何物理设备的寻址需要,CPU 实际只实现 48 位(LA57 下 57 位), 未实现的高位必须符号扩展 ——由此产生 canonical hole(非规范洞):48 位实现下 bit 63:47 全 0 或全 1 的地址才合法,中间是 16384PB 的禁地。内核把自己…
- 2026-09-23 Linux内核分析之内存管理-01 19.1 多级页表结构 —— PGD 到 PTE 要管理页表,内核必须先回答一个抽象问题: 页表长什么样? 每个架构的答案不同——x86 64 四或五级、ARM64 三到五级可配、RISC-V 三到五级运行时冻结——但内核的核心子系统(内存管理、缺页处理、页表复制)不能为每个架构写一套。于是 Linux 用五级固定命名的层级抽象(pgd/p4d/pud/pm…
- 2026-09-23 Linux内核分析之内核同步-02 17.1 RCU 原理 —— 读侧无锁的优雅方案 RCU(Read-Copy-Update,读-拷贝-更新)是 Linux 内核中最独特的同步机制: 读者不加锁、不用原子操作、甚至(在强序架构上)不用内存屏障 ,只做两件事——取指针、解引用;写者则复制一份新数据、原子地替换指针、然后 等所有"可能还在读旧数据"的读者都离开后 才真正释放旧数据。这个"等"的窗…
- 2026-09-23 Linux内核分析之内核同步-01 16.1 自旋锁 —— spinlock t 与 ticket lock 自旋锁(spinlock)是内核中最基础的锁原语:当锁不可用时,获取者不让出 CPU,而是在原地"自旋"反复检测锁状态,直到持锁者释放。这种策略在临界区极短的场景下远优于睡眠——省去了两次上下文切换的代价,但代价是持锁期间必须禁止抢占,且等待者白白消耗 CPU。Linux 7.0.10…
- 2026-09-23 Linux内核分析之内核同步-00 15.1 原子操作 —— atomic t 与 atomic64 t 原子操作是内核并发设施的最低层:一条不可分割的"读-改-写"(RMW)指令完成的计数或位操作,不需要锁、不需要睡眠,是自旋锁(16.1 节)、refcount(8.1 节的 task struct.usage )、信号量与全部引用计数机制的地基。Linux 7.0.10 把原子 API 组…
- 2026-09-23 Linux内核分析之进程管理-06 14.1 进程终止 -- do exit() 与资源回收 进程终止是操作系统中最复杂的状态转换之一。一个进程在运行期间持有大量内核资源:内存地址空间、文件描述符、信号处理器、POSIX 定时器、命名空间引用、cgroup 归属等。 do exit() 函数必须按照严格的顺序逐一释放这些资源,确保不产生死锁、不遗漏资源、不破坏内核一致性。本节将结合 Linux…
- 2026-09-23 Linux内核分析之进程管理-05 13.1 上下文切换的触发条件 上下文切换并非凭空发生,它总是由特定的事件或条件触发。Linux 内核中触发调度(进而可能导致上下文切换)的入口最终都汇聚到 schedule() 函数( kernel/sched/core.c:6748 ),但到达这个入口的路径却多种多样。根据触发方式的不同,内核定义了四种调度模式: 这些模式不仅影响 schedule() …
- 2026-09-23 Linux内核分析之进程管理-04 12.1 cgroups 演进与 v2 设计哲学 cgroups (Control Groups) 是 Linux 内核中最重要的进程资源管理基础设施之一。它将系统中的进程组织成层次化的分组,并对每个分组施加资源限制、统计和隔离策略。本节深入分析 cgroups 从 v1 到 v2 的演进历程,剖析 v2 设计中的核心哲学,并结合 Linux 7.0.10 …
- 2026-09-23 Linux内核分析之进程管理-03 11.1 Linux 调度器演进史 Linux 调度器经历了三十多年的持续演进。从 Linus Torvalds 在 1991 年写下的第一版调度器,到如今 Linux 7.0 中基于 EEVDF 理论的现代调度器,每一次重大变革都源于对已有设计瓶颈的深刻反思。本节将追溯这条演进之路,理解每一次变革背后的动机与设计哲学。 --- 11.1.1 原始调度器:L…
- 2026-09-23 Linux内核分析之进程管理-02 10.1 fork() —— 写时复制的基础 fork() 是 UNIX 系统中最古老的系统调用之一。它的语义简洁而优雅:创建调用进程的精确副本。子进程获得父进程地址空间、文件描述符、信号处理器等所有资源的独立拷贝,但拥有自己的 PID。fork() 最令人着迷的特性是它 "返回两次" —— 在父进程中返回子进程的 PID,在子进程中返回 0。本节将深入分析…
- 2026-09-23 Linux内核分析之进程管理-01 9.1 命名空间概述与设计哲学 9.1.1 为什么需要命名空间 传统的 UNIX 系统设计中,许多核心系统资源是全局共享的。所有进程共享同一个进程 ID 空间:PID 1 永远是 init 进程;所有进程看到同一棵挂载树:mount 和 umount 操作对全局可见;所有进程共享同一个主机名:通过 uname() 系统调用获取;所有进程使用同一套网络栈:网卡…
- 2026-07-14 PALO-ST 🔒
- 2026-06-17 CP-CVE-2026-50751 🔒
- 2026-06-17 CP-ST 🔒
- 2026-06-11 FT-CVE-2023-27997 🔒
- 2026-05-29 Linux内核分析之进程管理-00 8.1 task struct 核心字段详解 task struct 是 Linux 内核中最核心的数据结构,定义在 include/linux/sched.h 的第 820 至 1654 行。本节将逐组深入分析其全部关键字段,涵盖从线程信息到架构相关状态的全部内容。理解 task struct 是阅读 Linux 内核源码的基石——几乎所有内核子系统都通过…
- 2026-05-29 Linux内核分析之基础知识-06 7.1 系统调用原理与分类 7.1.1 什么是系统调用 系统调用是操作系统内核向用户态程序暴露的一组受控入口点(controlled entry points),是用户程序请求内核服务的标准接口。每一个系统调用都对应着内核中一个明确的功能函数,用户程序通过预定的调用约定触发这些函数,从而在内核特权级别下执行那些需要更高权限的操作。 从应用程序的视角来看,系统…
- 2026-05-28 Linux内核分析之总览 Linux 7.0 内核详解 目录 第一部分:基础知识 - 第1章:x86 64 体系结构概览 - 1.1 寄存器与数据类型 - 1.2 CPU 运行模式:实模式、保护模式与长模式 - 1.3 分段与分页机制 - 1.4 中断与异常 - 1.5 特权级与保护机制 - 1.6 Linux 内核安全加固机制全景 - 第2章:从加电到内核启动 —— 完整引导流程 …
- 2026-05-28 Linux内核分析之基础知识-05 6.1 RISC-V 架构概述:寄存器、特权级与 CSR 本节全面介绍 RISC-V 64 位架构的编程模型,包括寄存器组织、特权级别、控制状态寄存器、调用约定以及关键 ISA 扩展。这些知识是理解后续内核启动和运行机制的基石。 6.1.1 寄存器组织 通用寄存器(GPR) RISC-V 定义了 32 个 64 位通用寄存器 x0-x31,其中 x0 始终为…
- 2026-05-28 Linux内核分析之基础知识-04 5.1 ARM64 架构概述 —— 寄存器、异常级别与系统寄存器 本节全面介绍 ARM64(AArch64)执行状态的核心编程模型,这是理解 Linux ARM64 内核代码的基础。我们将依次讨论寄存器文件、异常级别模型、关键系统寄存器、过程调用约定,以及与 x86 64 的本质差异。 1. ARM64 寄存器文件 ARM64 的寄存器文件设计体现了"简洁即…
- 2026-05-28 Linux内核分析之基础知识-03 4.1 Kbuild 系统概述 什么是 Kbuild Kbuild 是 Linux 内核专用的构建系统,它构建在 GNU Make 之上,但绝非简单的 Makefile 集合。面对数万个源文件、数百个目录、数千个配置选项的复杂性,Kbuild 通过一套精心设计的递归构建机制,实现了高效、灵活、可扩展的编译流程。 Kbuild 的核心设计理念是: 每个目录自治…
- 2026-05-28 Linux内核分析之基础知识-02 3.1 start kernel() 总览 函数定位 start kernel() 定义在 init/main.c 的第 1006 行至第 1218 行,是内核通用初始化的总入口。当 x86 64 的体系结构引导代码在 head64.c 中完成长模式切换、早期页表建立、内核解压等工作后, x86 64 start reservations() 将控制权转交给…
- 2026-05-28 Linux内核分析之基础知识-01 2.1 启动流程概览 当用户按下计算机电源键的那一刻,一场从硬件固件到操作系统内核的接力赛便悄然拉开序幕。在 x86 64 平台上,Linux 7.0 内核的启动过程涉及多个执行阶段,跨越 16 位实模式、32 位保护模式与 64 位长模式,最终将控制权交由架构无关的通用初始化代码。本节将对这一完整链路进行全景式梳理。 2.1.1 完整启动序列 以下是 x8…
- 2026-05-28 Linux内核分析之基础知识-00 1.1 寄存器与数据类型 x86 64 架构在传统 x86 的基础上将通用寄存器从 32 位扩展到 64 位,并新增了八个通用寄存器(R8–R15)。本节系统性地介绍 Linux 7.0 内核在 x86 64 模式下所使用的各类寄存器,包括通用寄存器、指令指针、标志寄存器、段寄存器、控制寄存器、模型专用寄存器(MSR)、调试寄存器以及 SIMD 扩展寄存器,…
- 2026-05-12 FT-ST 🔒
- 2026-05-12 VulnHeaven 🔒
- 2026-05-11 FT-CVE-2022-42475 🔒
- 2026-04-22 FT-CVE-2024-21762 🔒
- 2026-04-14 深入理解Pwn_Browser及相关赛题 🔒
- 2026-04-03 深入理解Pwn_Qemu逃逸基础篇 QEMU 架构 QEMU-架构图 deepwiki QEMU 与 KVM 的完整架构整体上分为三大部分: - VMX root 模式的用户空间应用层 (QEMU 进程) - VMX root 模式的内核空间 (Linux KVM 驱动模块) - VMX non-root 模式的虚拟机运行环境 (Guest 虚拟机) 其中,VMX root 和 VMX non…
- 2026-03-27 Samsung-MediaTek 🔒
- 2026-01-29 UEFI开发指南 🔒
- 2026-01-27 OoOoOpps 🔒
- 2026-01-27 CTX 🔒
- 2026-01-26 SCW 🔒
- 2026-01-26 IVT 🔒
- 2026-01-22 Linux内核分析之安全模块-00 52.1 LSM 钩子机制与安全审计 LSM 的框架本体是"一张钩子头表 + 每模块一条注册链 + 一组调用点"。调用点遍布 VFS/进程/IPC/网络子系统,覆盖所有"对象访问"语义;每个钩子返回 0(放行)或负错误码(拒绝)。本节解剖钩子结构、调用点分布与审计出口。 --- 52.1.1 security hook list:钩子的注册形态 52.1.2…
- 2026-01-20 Linux内核分析之内存管理-00 Linux 6.12 内存管理概览
- 2026-01-15 Linux内核分析之虚拟化-00 49.1 KVM 模块加载与 /dev/kvm KVM 对用户态的全部接口浓缩为一个字符设备 /dev/kvm 与它派生出的两类 fd(VM fd、vCPU fd)。本章解剖这个"三层 fd"的创建链: /dev/kvm 的 misc 注册(40.3 节)、 KVM CREATE VM 建立的 struct kvm 、 KVM CREATE VCPU 建立的…
- 2026-01-08 Linux内核分析之前置知识-00 内核环境搭建
- 2025-12-23 Rust虚拟化开发 🔒
- 2025-12-23 Rust操作系统开发 🔒
- 2025-12-15 深入理解Pwn_Kernel基础篇 Linux 内核利用基础
- 2025-09-29 LibSFNet开发手记 🔒
- 2025-08-11 Linux-BSP开发指南 🔒
- 2025-07-15 动手构建大语言模型 🔒
- 2025-07-01 x86-64体系结构编程 🔒
- 2025-05-07 VS 🔒
- 2025-04-02 LibCSTL开发手记 前言 项目地址:https://github.com/jelasin/LibCSTL 移植Linux内核一些优秀的数据结构和算法和一些其他的常用数据结构和算法模板。 Linux Kernel list 移植优化 移植后我们只需要将 list node 定义在你自己的结构体中即可。为了可读性和操作简化,请把 list node 定义在结构体头部,虽然对于 li…
- 2025-04-02 LibCoroutine开发手记 简介 项目地址:https://github.com/jelasin/LibCoroutine 使用C开发的一个协程库,支持协程同步,动态添加,通过调度器进行协程调度。 整体架构 等待队列这里只画了一个,实际上每个条件变量都有一个自己的等待队列。 数据结构 co types.h coroutine.h 调度器实现 co scehduler.h corouti…
- 2025-03-21 LLM开发指南 🔒
- 2025-03-19 动手写Linux-x64操作系统 🔒
- 2025-03-18 Linux-Rust-内核开发 🔒
- 2025-03-18 Linux-C-内核开发 🔒
- 2025-03-18 动手写TCP-IP协议栈-C语言版 🔒
- 2025-03-17 Linux-Rust-驱动编程 🔒
- 2025-03-14 Linux内核分析之进程间通信-00 26.1 管道原理与 pipe inode info 管道的全部状态浓缩在一个 pipe inode info 里:一个互斥锁、两套等待队列、一个环形缓冲索引、读写者计数。它的精妙在于 用最小状态承载完整的生产者-消费者语义 ——环形队列天然解决"谁先谁后",计数器天然解决"端的存在性", pipe buf operations 则让同一环可以装页缓存页、匿…
- 2025-03-14 Linux内核分析之网络协议栈-00 44.1 网络协议栈分层与 sk buff sk buff(skb)是网络栈的通用语:从驱动到 TCP,报文以 skb 传递,各层只做"加头/减头/改偏移", 数据本体几乎不拷贝 。这套设计的核心是三个决定:描述符与数据区分离、数据区内的四指针移动、协议头偏移的缓存。本节逐段解剖这个"网络栈的通用语",它是读一切网络代码的前提。 --- 44.1.1 skb…
- 2025-03-14 Linux内核分析之设备驱动-00 39.1 kobject、kset 与 ktype kobject 是设备模型的"对象基类"——它不描述任何设备,只提供 名字、树关系、引用计数、sysfs 投影与生命周期回调 五件通用物。device/driver/bus 全部把它当第一个字段嵌入。本节拆解这个基类与它的两个伙伴。 --- 39.1.1 kobject:五件通用物 五件通用物与 sysfs…
- 2025-03-14 Linux内核分析之文件系统-00 33.1 VFS 核心对象 —— superblock、inode、dentry、file VFS 的全部功能由四个对象承载,每个对象回答一个不同的问题:super block 回答"这是哪个文件系统",inode 回答"这个文件是什么",dentry 回答"这个文件叫什么",file 回答"谁正在怎么用它"。本节逐字段拆解四者与它们的操作表。 --- 33…
- 2025-03-13 动手构建编程语言-编译器-解释器-DSL 🔒
- 2025-03-13 动手写RTOS-C语言版 🔒
- 2025-03-13 动手写Docker-C语言版 🔒
- 2025-03-11 Bootkit开发手记 🔒
- 2025-03-11 Rootkit开发手记 🔒
- 2025-02-27 深度学习 🔒
- 2025-02-23 STM32开发指南 🔒
- 2025-02-21 机器学习 🔒
- 2025-02-20 ROS2指南 🔒
- 2025-02-19 计算机视觉研究-OpenCV和YOLO 🔒
- 2025-02-17 Frida-python指南 🔒
- 2025-02-11 Rust开源操作系统训练营项目集合 🔒
- 2025-02-11 Android-HAL开发指南 🔒
- 2025-02-11 蓝牙开发指南 🔒
- 2025-02-11 音频流媒体开发指南 🔒
- 2025-02-11 RTOS指南 🔒
- 2025-02-11 硬件指南 🔒
- 2025-02-11 Linux-C-驱动编程 🔒
- 2025-02-10 RISV体系结构编程 🔒
- 2025-02-07 自动化模糊测试工具编写 🔒
- 2025-02-07 模拟执行 🔒
- 2025-02-07 反汇编引擎 🔒
- 2025-02-06 二进制插桩与污点分析 🔒
- 2025-02-06 Linux环境编程与内核之网络通信 概述 在互联网时代,网络通信编程已经是一个程序员必不可少的技能之一。几乎所有的产品都会涉及网络操作或访问。在Linux编程环境中,系统提供了socket套接字为程序员提供统一的网络编程接口。这里假设读者有一定的Linux网络编程基础,所以对于系统调用的解释都是点到为止,只针对不常见或容易忽视的问题进行详细说明。后面手写一个 tcp/ip 协议栈,这里除了基本…
- 2025-02-06 Linux环境编程与内核之进程间通信 概述 在Linux系统中,有时候需要多个进程相互协作,共同完成某项任务。进程之间或线程之间有时候需要传递消息,有时候需要同步来协调彼此的工作。接下来讲述Linux中的进程间通信(interprocess communication,或者IPC)。 讲信号时曾提到,信号也是进程间通信的一种机制,尽管其主要作用不是这个。一个进程向另外一个进程发送信号,传递的信息…
- 2025-02-06 Linux环境编程与内核之线程 线程和进程 在Linux下,程序或可执行文件是一个静态的实体,它只是一组指令的集合,没有执行的含义。进程是一个动态的实体,有自己的生命周期。线程是操作系统进程调度器可以调度的最小执行单元。进程和线程的关系如图: 一个进程可能包含多个线程,传统意义上的进程,不过是多线程的一种特例,即该进程只包含一个线程。为什么要有多线程?举个生活中的例子,这就好比去银行办理业…
- 2025-02-06 Linux环境编程与内核之信号 信号概念 信号是一种软件中断,用来处理异步事件。内核递送这些异步事件到某个进程,告诉进程某个特殊事件发生了。这些异步事件,可能来自硬件,比如访问了非法的内存地址,或者除以0了;可能来自用户的输入,比如shell终端上用户在键盘上敲击了Ctrl+C;还可能来自另一个进程,甚至有些来自进程自身。信号的本质是一种进程间的通信,一个进程向另一个进程发送信号,内核至少…
- 2025-02-06 计算机操作系统 🔒
- 2025-02-06 计算机组成原理 🔒
- 2025-02-06 计算机网络 🔒
- 2025-02-01 Shell编程与工程管理 Linux shell 编程 运维用到多一些,开发不是很常用,能看懂就行。 参考文献 : 《Linux shell编程 第三版》 《Linux shell核心编程指南》 https://www.runoob.com/linux/linux-shell-variable.html 基本知识 $0 : 脚本名称; $1-$2- $... : 脚本的第一,二,..…
- 2025-01-23 BPF学习 🔒
- 2025-01-23 CPP语言编程 前言 如果你是一个刚开始学CPP语言的小白,那么这篇文章或许并不适合你,本文主要聚焦于CPP语言的一些陷阱和缺陷,以及一些新标准的使用,和一些编程相关指南。我的本职工作是二进制安全研究,关于这些缺陷导致的致命问题也写了很多文章,本文不对漏洞的利用进行深入讲解。 设计模式 C++23种设计模式 创建型模式 结构型模式 行为模式 C++ 11 C++ 14 C+…
- 2025-01-23 Rust语言编程 rust 语言编程
- 2025-01-23 C++语言编程之STL内部实现 🔒
- 2025-01-23 C++语言编程之Boost标准库 🔒
- 2025-01-23 C语言编程 Linux C语言编程
- 2025-01-21 Qt6开发指南 🔒
- 2025-01-21 WG 🔒
- 2025-01-16 CS 🔒
- 2025-01-06 DT 🔒
- 2025-01-03 数据结构及算法 C 语言实现的数据结构与算法
- 2025-01-01 VIM配置和使用 教程网站 插件网站 VIM9 安装 从源安装 本机环境:ubuntu:22.04。 这个方法装的 vim9.0。最新版YCM(YouCompleteMe unavailable: requires Vim 9.1.0016+.)需要 9.1 以上。 编译安装 基本操作 教程网站 插件推荐 .vimrc 记得在 vim 里面 source /.vimrc 。 …
- 2024-12-16 Android安全-算法还原篇 🔒
- 2024-12-13 Android安全-风控篇 🔒
- 2024-12-13 ChromeV8-exploit 🔒
- 2024-12-13 Linux-kernel-exploit 🔒
- 2024-12-13 Syzkaller源码分析和使用技巧 🔒
- 2024-12-13 深入理解Pwn_musl及相关例题 musl-1.2.0 / musl-1.2.3 利用讲解
- 2024-12-11 ARM64体系结构编程 🔒
- 2024-12-09 Android安全-TrustZone篇 🔒
- 2024-11-23 深入理解Pwn_WinKernel及相关例题 🔒
- 2024-11-14 深入理解Pwn_Win及相关例题 🔒
- 2024-11-14 深入理解Pwn_VMWare逃逸及相关例题 🔒
- 2024-11-14 Android安全-framework篇 🔒
- 2024-10-23 深入理解Pwn_Qemu逃逸及相关例题 🔒
- 2024-10-23 Android安全-爬虫与反爬篇 🔒
- 2024-10-23 Android安全-混淆篇 🔒
- 2024-10-22 Android安全-虚拟化篇 🔒
- 2024-10-22 Android安全-应用篇 🔒
- 2024-10-22 Android安全-内核篇 基础知识 启动命令 CVE 复现 CVE-2023-21400 - Double Free DirtyPTE CVE-2023-21400 是 io uring 中的 Double-Free 漏洞,影响内核 5.10 。 漏洞分析 在 io uring 中,当我们提交 IOSQE IO DRAIN 请求时,在之前提交的请求完成前,不会启动该请求。因此,推迟处…
- 2024-10-21 Android安全-开发篇 🔒
- 2024-10-06 Android安全-渗透篇 🔒
- 2024-10-06 Android安全-加解密篇 🔒
- 2024-09-26 Android安全-脱壳篇 🔒
- 2024-09-09 Android安全-抓包篇 🔒
- 2024-08-19 BLE蓝牙安全 前言 学习参考 https://www.nordicsemi.cn/,此外请先阅读博客种无线电安全专题的蓝牙安全部分。 常见攻击类型 身份跟踪: 利用蓝牙地址来跟踪设备。这可以通过使用随机变化的可解析私有地址(Resolvable Random Private Address)来避免,其中只有绑定/可信设备才能解析私有地址。IRK(身份解析密钥)用于生成和解…
- 2024-08-06 深入浅出TEE TEE简介
- 2024-07-15 符号执行 angr 符号执行讲解
- 2024-05-30 Android安全-基础篇 🔒
- 2024-05-28 RCTF-2024-pwn 写在前面 很久不打 CTF 比赛了,感觉现在的 Pwn 对代码审计和 Fuzz ,信息收集(相关的CVE)和逆向能力要求越来越高了。 Taskgo 个人感觉对于Go和Rust编译的程序来说,使用IDAPro来动态调试比gdb要好用一些。 逆向分析 main main函数利用PostTask提交CtfMain()任务。 CtfMain CtfMain函数内,利…
- 2024-05-21 Android安全-逆向篇 🔒
- 2024-04-24 D-Link-CNVD-2013-11625 漏洞概述 漏洞成因: hedwig.cgi 文件中,传输时未限制COOKIE长度,导致COOKIE长度过长时引发栈溢出问题。 影响范围: DIR-815/300/600/645 等型号。 仿真工具: FirmAE 获取固件: 下载地址 使用qemu仿真请获取相应内核及镜像文件: vmlinux-3.2.0-4-4kc-malta debian squeeze…
- 2024-04-13 Android安全之旅 🔒
- 2024-04-10 深入理解Pwn_Browser基础篇 🔒
- 2024-03-30 渗透手札之编写POC 🔒
- 2024-03-25 智能合约安全浅析 🔒
- 2024-03-15 无线电安全专题 🔒
- 2024-02-14 FUZZ专题 🔒
- 2024-02-01 Linux环境编程与内核之进程 前言 在Linux内核源码分析进程一篇中,讲解了内核中进程的实现原理,本文从开发角度来审视进程。 进程环境 程序的开始 在链接生成最后的可执行文件时,有大量的C库二进制文件参与进来,如crt1.o、crti.o等。可见最终的可执行文件,除了我们编写的这个简单的C代码以外,还有大量的C库文件参与了链接,并包含在最终的可执行文件中。这个“组装”的过程,是由链接器…
- 2024-01-23 渗透手札之Linux权限提升与权限维持 🔒
- 2024-01-23 渗透手札之Windows权限提升与权限维持 🔒
- 2024-01-22 渗透手札之内网穿透 🔒
- 2024-01-22 Linux环境编程与内核之文件与IO 内核文件表 文件 Linux内核将一切视为文件,既可以是事实上的真正的物理文件,也可以是设备、管道,甚至还可以是一块内存。狭义的文件是指文件系统中的物理文件,而广义的文件则可以是Linux管理的所有对象。这些广义的文件利用 VFS 机制,以文件系统的形式挂载在Linux内核中,对外提供一致的文件操作接口。 文件描述符 文件描述符是一个非负整数,其本质就是一个…
- 2024-01-19 渗透手札之免杀与远控 🔒
- 2023-12-26 渗透手札之信息收集 🔒
- 2023-12-09 深入理解Pwn_Base_knowledge Linux Pwn 基础知识
- 2023-10-30 AI安全研习 🔒
- 2023-10-25 车联网安全专题 车联网安全
- 2023-10-24 密码学笔记 🔒
- 2023-10-17 如何黑掉一颗卫星 🔒
- 2023-10-17 IoT安全专题 IoT安全基础
- 2023-10-16 计算机科学中的数学 🔒
- 2023-10-16 深入理解Pwn_Kernel及相关例题 Linux 内核利用
- 2023-10-16 深入理解Pwn_Other及相关例题 🔒
- 2023-10-05 Netgear-CVE-2019-20760 前言 此文已投给蚁景网安,蚁景网安公众号链接。 漏洞概述 漏洞服务: uhttpd 漏洞类型: 远程命令执行 影响范围: 1.0.4.26之前的NETGEAR R9000设备会受到身份验证绕过的影响 解决建议: 更新版本 漏洞复现 操作环境: ubuntu:22.04 qemu-version: 8.1.1 仿真环境 下载固件。 可通过 binwalk 常规…
- 2023-09-27 深入理解Pwn_IO_FILE及相关赛题详细解析 glibc IO_FILE 利用讲解
- 2023-09-27 深入理解Pwn_LLVMPass及相关例题 🔒
- 2023-09-22 Web安全专题 web 安全基础
- 2023-09-22 Tcache安全机制及赛题详细解析 glibc tcache 堆利用
- 2023-09-22 深入理解Pwn_heap及赛题详细解析 glibc 堆利用讲解
- 2023-09-20 关于博客 主要内容 主要用来记载Pwn、IoT、Car和Linux&&Win内核等相关内容。 说明 1. 侧边栏没有超链接的直接在博客搜名字即可。 2. 侧边栏我添加的内容并不及时。 其他的 记录一些琐碎。 不要急功近利,心急浮躁,潜下心来默默钻研,学习,记录,每天进步一点。 看懂了,不等于你会了。