- 博客(196)
- 资源 (4)
- 收藏
- 关注

翻译 CVE-2021-22555利用过程翻译
原文链接:https://google.github.io/security-research/pocs/linux/cve-2021-22555/writeup.html本文基本属于翻译,原文解释的很清楚,我按自己的理解来记录下。漏洞位于netfilter。原作者利用此漏洞获得了两万美金的奖励。漏洞比较老,存在将近15年之久,从这个漏洞来看,内核其实类似的漏洞应该还有不少。今年貌似爆出了类似的漏洞 https://github.com/Bonfee/CVE-2022-0995 。今天又看到一个:htt
2022-03-30 16:19:54
1382
原创 qemu vcpu的创建过程
这段代码的主要功能是根据 QEMU 的配置(MTTCG 或 RR 模式,以及是否启用指令计数)初始化 TCG 加速器的操作函数。这些操作函数定义了 vCPU 线程的启动、唤醒、中断处理以及调试支持等行为。
2025-07-10 16:30:42
1311
原创 qemu 关于numa的核心管理
通过以上对应关系,可以清晰看到QEMU的NUMA模拟算法如何从解析用户输入开始,经过验证、补全,最终构建出符合要求的NUMA拓扑,实现对真实NUMA架构的虚拟化模拟。
2025-07-09 10:36:56
381
原创 linux内核对于NUMA的管理
等机制,尽可能减少跨节点内存访问。调优的关键在于:根据应用特性(内存密集型/CPU密集型)选择合适的内存分配策略和进程亲和性设置,避免“远程内存陷阱”。在Linux内核中,NUMA(Non-Uniform Memory Access)调度算法的核心目标是。以下是与NUMA调度相关的重要内核参数(可通过。Linux内核提供多种内存分配策略,通过。Linux内核的NUMA调度算法通过。
2025-07-09 10:03:06
637
原创 在RISC-V开发板上更换SBI
在RISC-V开发板上更换SBI(Supervisor Binary Interface,超级visor二进制接口)是一个常见需求,特别是当你需要升级固件功能、修复安全漏洞或适配特定硬件时。SBI是RISC-V架构中M模式(机器模式)固件与S模式(超级visor模式)内核之间的接口规范,类似x86架构的BIOS/UEFI。选择合适的方法和版本,确保SBI与硬件及上层软件兼容,是顺利完成更换的关键。运行内核或测试程序,验证SBI提供的服务(如时钟、中断处理)是否正常。根据开发板型号选择合适的SBI实现。
2025-07-07 10:32:57
717
原创 penglaispmp--enclave_mm关于region管理的逻辑
基于PMP的内存隔离:通过PMP寄存器将enclave内存与其他区域隔离,初始权限为“无访问”,仅在需要时(如内核初始化enclave)临时开放权限。伙伴系统的内存管理:采用伙伴系统实现高效的内存分配与释放,支持块的拆分与合并,减少碎片。线程安全:通过自旋锁()保证多线程环境下对pmp_bitmap和伙伴系统链表的操作原子性。
2025-07-04 10:49:08
857
原创 sbi-firmware代码解析
基于opensbi-1.2 分析这段代码是一个 RISC-V 架构下的固件启动程序,用于在系统启动时执行初始化操作、重定位代码、设置内存保护、处理中断和异常,并最终将控制权传递给下一个启动阶段。以下是逐步解释:这个启动程序确保在 RISC-V 系统启动时正确配置寄存器、内存和设备树,并为后续的启动过程准备好参数和模式。这段代码是一个 RISC-V 架构下的固件启动程序的一部分,它处理动态信息的验证和保存,以确保启动过程的正确性和安全性。以下是逐步解释:处理错误的动态信息:如果动态信息验证失败,进入一个无
2025-07-03 14:03:08
777
原创 penglai pmp 内存权限配置过程
这段代码是一个平台初始化函数 ,用于配置 RISC-V 架构下的物理内存保护(PMP)寄存器。PMP 寄存器用于控制对物理内存的访问权限,确保只有授权的访问才能进行。下面是逐步解释:定义PMP配置结构体:定义了一个 结构体变量,用于存储 PMP 配置信息,包括物理地址、大小、模式和权限。清除 PMP1:这行代码用于清除 PMP 寄存器 1 的配置。PMP1 被保留用于允许内核在飞地(enclave)内存中配置页表。 函数用于清除指定的 PMP 寄存器并同步状态。打印初始化信息:打印一条信
2025-07-03 11:38:09
584
原创 penglai sbi 内存管理单元 walk_enclave_pt
这段代码实现了一个函数 ,用于在一个内存管理单元(MMU)的页表结构中查找特定虚拟地址对应的页表项。这个函数在 RISC-V 架构下工作,用于遍历多级页表以找到对应虚拟地址的页表项。以下是代码的详细解释:1.1. 函数参数:1.2. 变量定义:1.3. 遍历页表层级:1.4. 返回叶子页表项:这个函数是内存管理中的一个关键部分,用于在多级页表中查找特定虚拟地址对应的页表项,以便进行内存映射或其他内存管理操作。该函数用于在多级页表结构中确定虚拟地址在某一特定层级的索引位置。它根据虚拟地址的位移和页表层级来计
2025-07-03 10:58:34
947
原创 牛顿迭代公式
梯度下降通过负梯度方向的迭代更新,将复杂的高维函数优化问题转化为逐步逼近最小值的可计算过程。其有效性依赖于梯度本身的数学性质(方向导数极值性)与算法参数(如学习率)的合理选择,成为现代优化理论与工程实践的基础工具。
2025-05-14 17:42:32
158
原创 损失函数概念
衡量模型的预测误差。指导模型优化。反映任务目标。提供训练反馈。帮助模型泛化。选择合适的损失函数对于模型的成功至关重要,因为它直接决定了模型的学习目标和优化方向。
2025-04-27 10:20:03
476
原创 样本处理过程
每个样本包含 3 个时间步的数据,例如[1, 2, 3]。x_train是每个样本的前 2 个时间步,即[1, 2]。y_train是每个样本的第 3 个时间步,即[3]。x_train是从前 6 个样本中提取的前 2 个时间步:[[1, 2],[2, 3],[3, 4],[4, 5],[5, 6],[6, 7]]y_train是从前 6 个样本中提取的第 3 个时间步:[3, 4, 5, 6, 7, 8]每个样本包含 3 个时间步的数据,例如[7, 8, 9]。x_test。
2025-04-25 14:48:22
430
原创 数据归一化
数据归一化(Normalization)是一种常见的数据预处理技术,目的是将数据缩放到一个特定的范围内,通常是 [0, 1] 或 [-1, 1]。归一化的主要目的是消除不同特征之间的量纲差异,使得模型在训练时能够更好地收敛,尤其是对于基于距离的算法(如KNN、SVM)或梯度下降优化的算法(如神经网络)。通过这种方式,所有数据都被映射到了 [-1, 1] 的范围内,从而实现了归一化。列的数据缩放到 [-1, 1] 的范围内。
2025-04-25 10:49:31
310
原创 UEFI镜像结构布局
引导扇区:负责启动加载过程。UEFI 固件映像:包含固件的主体代码和数据。配置数据库:存储固件的配置信息。签名和验证数据:确保固件的完整性和合法性。备用区域:提供固件的备份副本,以防主副本损坏。详细描述结构图描述了一个典型的 UEFI 镜像在物理存储设备(如 SPI 闪存或硬盘)中的分层布局。1. 引导扇区(Boot Sector)作用:兼容传统 BIOS 启动模式,或作为 UEFI 启动的补充入口(例如从 MBR 磁盘启动)。内容。
2025-04-03 18:16:25
985
原创 kdump分配内存过程分析
控制页(Control Pages)是内核崩溃时加载第二个内核(crash kernel)所需的临时内存,用于管理内存复制、页表映射等关键操作。系统调用加载crash kernel时,此函数被触发。典型调用路径 kexec_load系统调用 kdump服务初始化。通过此函数可看出,内核在崩溃转储过程中对控制页的管理遵循。内存来源 普通内存池 预留crash内存区域。分配时机 动态分配 预分配+运行时锁定。可靠性要求 允许失败 必须保证可用性。原则,确保关键操作的内存安全。特性 常规分配 崩溃分配。
2025-03-27 16:23:53
843
原创 SEV内存加密位linux内核设置过程
其作用是为内存加密操作提供统一的入口,但实际功能由架构相关代码(如 AMD SVM)实现。,理解其工作原理有助于调试旧版本兼容性问题,但在新开发中应遵循 AMD 官方推荐使用。此时旧接口仍有效,但。:表示当前内核或硬件。
2025-03-21 11:57:10
457
原创 linux内核 kvm_mmu_page_fault 分析
此函数用于处理客户机(Guest)的页错误(Page Fault),是KVM内存管理单元(MMU)的核心逻辑之一。主要任务包括处理直接物理映射、MMIO访问、嵌套虚拟化错误和指令模拟。此函数是KVM处理客户机页错误的核心逻辑,涵盖从错误分类(MMIO、嵌套错误)到指令模拟的全流程,通过条件分支和硬件特性优化性能。
2025-03-20 11:46:40
521
原创 qemu ept设置过程
在基于 Intel VT-x 的虚拟化环境中,EPT(扩展页表)负责将。若有具体代码或场景需要深入分析,可进一步探讨!
2025-03-19 19:22:53
1012
2
原创 qemu日志系统添加分析
使用-d my_log过滤LOG_MY_LOG日志的底层机制核心逻辑QEMU 通过名称映射和位掩码匹配实现-d my_log参数与LOG_MY_LOG日志的关联。通过-d my_log名称与位掩码的绑定(在中注册)位掩码唯一性(避免与内置日志冲突)正确调用(条件匹配)
2025-03-19 16:36:12
992
原创 QEMU 中 x86_cpu_realizefn 到 ept_emulation_fault 的调用流程解析(macos)
的流程,涵盖了 QEMU 中 x86 CPU 的初始化、vCPU 线程启动、客户机代码执行及内存虚拟化异常处理的核心路径。在 QEMU 的 x86 虚拟化实现中,CPU 的初始化与执行流程涉及多个关键函数,从 CPU 设备的最终初始化(方法,负责完成 CPU 的最终初始化(如设置 CPU 型号、检查特性兼容性、注册热插拔逻辑等)。为每个虚拟 CPU 创建执行线程,并绑定到加速器(如 HVF/KVM)的后端操作。)到虚拟机监控程序(HVF)中处理 EPT(扩展页表)缺页异常(是 x86 CPU 设备的。
2025-03-18 15:13:19
980
原创 kvm_emulate_hypercall代码解析()
Hypercall 是虚拟机(Guest)向宿主机(Host)请求特权操作的机制,类似于系统调用(但针对虚拟化场景)。是 KVM 实现 Hypercall 的核心分发逻辑,结合特权检查、模式适配和用户空间协作,为虚拟机提供了与宿主机交互的安全通道。是 KVM(Kernel-based Virtual Machine)中处理虚拟机发起的。
2025-03-17 19:10:42
900
原创 CSV加密代码分析
在支持内存加密的虚拟机迁移(如 AMD SEV、Intel TDX)场景中,ram_load负责将加密的内存数据安全地加载到目标虚拟机,并确保解密过程的完整性和机密性。ram_loadC-bitAES-128VMSAMK-TME在支持保密计算的虚拟机中,ram_loadVMPL如果需要分析具体硬件(如 SEV 或 TDX)的解密实现细节,可进一步说明目标平台。
2025-03-17 12:31:38
946
原创 kvm 创建虚拟机核心分析
此函数为 vCPU 提供架构相关的初始化Guest 能正确感知硬件能力(通过 CPUID/MSR)。内存管理(MTRR/MMU)符合虚拟化需求。vCPU 状态处于可运行的标准初始状态。这是虚拟机正常启动和运行的基础设施保障。
2025-03-13 16:33:23
643
原创 KVM代码解析----kvm_init
kvm_init函数是KVM模块的核心初始化函数,负责初始化架构特定的功能、硬件设置、CPU兼容性检查、资源分配和设备注册等。通过这个函数,KVM模块能够正确地设置和运行虚拟化环境。函数是KVM模块的架构特定初始化函数,负责初始化x86架构相关的KVM功能。它检查硬件支持、分配资源、设置操作函数,并初始化核心功能模块。通过这个函数,KVM模块能够正确地设置和运行虚拟化环境。
2025-03-13 15:27:06
790
原创 线性规划原理
定义线性规划(Linear Programming, LP)是运筹学中用于解决最优化问题的一种数学方法。其核心是在一组线性约束条件下,寻找某个线性目标函数的最大值或最小值。这类问题广泛应用于资源分配、生产计划、运输调度等领域。
2025-03-12 10:55:12
1214
原创 waydroid源码分析
这段代码是 Waydroid 项目的一部分,主要负责配置和管理 LXC 容器,以实现 Android 环境在 Linux 系统上的运行。LXC 容器配置:生成容器所需的设备节点、挂载点和系统属性。容器生命周期管理:启动、停止、冻结和解冻容器。硬件访问支持:配置图形设备、Binder 驱动和其他硬件节点。用户会话集成:动态挂载用户目录和通信套接字。Android 环境模拟:设置系统属性和环境变量,模拟 Android 运行环境。镜像获取与更新。
2025-03-07 17:07:47
1005
原创 android系统启动过程
的实现,可以深入理解 Android 启动流程的控制逻辑,并为定制系统行为(如添加新服务、修改启动顺序)提供技术基础。:SystemServer 完成服务启动后发送 BOOT_COMPLETED 广播。是用户空间的第一个进程(PID=1),解析。:内核完成系统启动,初始化系统服务和驱动。触发器启动 Zygote 进程。创建子进程并执行二进制文件。执行early-init阶段。脚本,管理服务生命周期。执行late-init阶段。加载SELinux策略。内核启动init进程。进入无限循环处理事件。
2025-03-06 16:26:52
889
原创 linux内核中关于ip分组代码分析逻辑--基于5.4
原子操作:skb_list_del_init保证链表操作的原子性。通过dst_input()将报文传递给传输层(TCP/UDP等)使用list_for_each_entry_safe实现安全遍历。提升CPU缓存命中率(同一设备的报文往往有相似处理路径)安全遍历:使用_safe后缀的遍历宏防止链表断裂。通过IP_INC_STATS_BH更新内核计数器。调用ip_rcv_finish()完成最终处理。错误统计由ip_rcv_core内部完成。作用:执行IP层的通用接收处理。IP头校验(长度/校验和)
2025-02-27 20:07:34
328
原创 IO虚拟化相关原理
作用:每个 PCI Segment(总线组)对应一个 Root Table,用于索引设备所属的 Context Table。结构Root Table 是一个数组,每个条目(Root Entry)对应一个 PCI Bus 编号。每个 Root Entry 包含 Context Table 的基地址()和有效位(Present格式(简化):// Context Table 物理基地址// 条目是否有效作用。
2025-02-25 14:04:29
1393
原创 transfmer学习认识
将得到的分数通过Softmax函数转换为概率分布,表示每个值向量相对于其他值向量的重要性。例如,q1与k1的分数为14,与k2的分数为12,经过Softmax处理后,得到的概率分别为0.88和0.12。这张图片展示了Transformer模型中的自注意力(Self-Attention)机制的一个计算示例,特别是如何计算注意力分数和应用Softmax函数来确定每个输入元素的重要性。将输出转换为概率分布:softmax 函数可以将一个向量的每个元素转换为一个介于 0 和 1 之间的值,并且所有元素的和为 1。
2025-02-19 11:40:22
785
原创 TCP 握手数据包分析
二、服务端数据分析:这里服务端发送的syn ack数据包的check 与客户端收到的syn ack数据包的check 不知道为什么不同。
2025-01-24 10:44:38
755
原创 磁盘文件系统问题排查
随着硬盘扇区大小从512字节增加到4096字节(即4K扇区),为了提高磁盘读写效率和减少磁盘空间浪费,文件系统的起始位置通常设置为4096字节的整数倍。性能优化:将超级块放在1024字节偏移处,可以为引导加载程序和分区表留出空间,同时确保文件系统的关键元数据(如超级块和组描述符)在磁盘上的分布是均匀的,这有助于提高文件系统的读写性能和可靠性。当文件系统的块大小设置为4096字节时,超级块(ext4_super_block)从偏移量1024字节(1个扇区)开始的原因主要是为了向后兼容和对齐。
2024-11-27 14:10:46
423
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人