自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 xv6 源码精读(二)开启MMU、一致性映射页表

本文通过xv6 aarch64,介绍了armv8架构下MMU相关的一些知识,包括一致性页表、页表翻译、页表描述符属性等。

2025-10-21 22:07:48 950

原创 xv6 源码精读(一)环境搭建

xv6 是由麻省理工学院(MIT)开发的一个现代化的教学用操作系统,xv6 是在经典的Unix V6基础上进行现代化重写,以适应现代处理器架构。xv6支持任务调度、进程间通信、文件系统、多核启动、以及设备虚拟化。对于对操作系统感兴趣的学生和研究人员来说,xv6是一个很好的学习平台。。

2025-09-09 23:09:46 615

原创 Linux signal 图文详解(三)信号处理

信号处理在内核中的实现,主要就是获取pending信号,为pending信号设置好用户栈、寄存器上下文。当用户态信号处理完毕后,会借助sigreturn通过svc的方式再次陷入内核,进而恢复到原本的用户态上下文。

2025-09-05 01:26:35 1146

原创 Linux signal 图文详解(二)信号发送

Linux中,信号(signal)是进程间通信的一种重要机制,用于通知进程、线程、进程组发生了某种事件。1)kill 系统调用/** - pid:目标进程 ID,特殊值含义:* pid > 0:发送信号给 ID 为 pid 的进程* pid = 0:发送信号给与当前进程同组的所有进程* pid = -1:发送信号给所有有权限发送的进程(除了 init 进程)* pid < -1:发送信号给进程组 ID 为 |pid| 的所有进程。

2025-09-01 23:34:42 1242

原创 Linux signal 图文详解(一)信号简介、信号注册

信号机制是在软件层面上对中断机制的一种模拟。两者之间不仅是概念上类似,实现上也相类似。就像中断机制中有一个“中断向量表”一样,在每个进程的task_struct中都有指针sig,指向一个signal_struct结构。在中断机制中,每种中断请求都可以加以屏蔽而不让处理器对之做出响应,在信号机制中也有类似手段。在所有进程间通讯机制中,只有信号是异步的。对信号的检测与响应总是发生在内核态task由于系统调用、中断或异常陷入内核后,从内核态返回到用户态的前夕;

2025-08-30 00:25:11 677

原创 Linux coredump原理 图文详解

本文介绍了coreudmp文件的组成内容,以及一个程序发生crash后的完整处理流程。用户态程序crash后,主要借助内核的信号机制,完成所有线程的同步、以及各种corner case的处理,最终由触发crash的线程,在内核态中完成coredump文件的生成工作,完成后所有线程都会走常规的退出流程。

2025-08-24 12:51:39 814

原创 Linux copy_from_user/copy_to_user 底层原理

在Linux中,用户空间(User Space)和内核空间(Kernel Space)是相互隔离的,用户空间的程序无法直接访问内核空间的内存,反之亦然。然而,在实际应用中,用户程序经常需要与内核进行数据交换,比如通过系统调用(System Call)传递参数或读取内核数据。为了安全高效地完成这种跨空间的数据拷贝,Linux内核提供了copy_from_user和copy_to_user这两个关键接口。它们的主要作用是::将数据从用户空间安全地拷贝到内核空间。:将数据从内核空间安全地拷贝到用户空间。

2025-06-21 18:37:18 1147

原创 linux ptrace 图文详解(九) gdb如何判断被tracee唤醒的原因

前序文章中,讨论了绝大多数 ptrace系统调用 在 gdb 中的使用场景,这些场景中有一个共同点:被调试程序(即:tracee)最终都会给父进程GDB发送SIGCHLD信号,并唤醒GDB的wait系统调用。这其中有一个很重要的点,前序文章中并没有展开详细讲解:GDB被唤醒后,是如何判断自己是被什么事件唤醒的、以及是被哪个调试任务唤醒的,被调试程序发生了什么事情?

2025-05-23 20:53:03 1162

原创 linux ptrace 图文详解(八) gdb跟踪被调试程序的子线程、子进程

本文介绍了gdb调试程序时,如何跟踪被调试程序创建的子进程/子线程。

2025-05-09 22:43:27 886

原创 linux ptrace 图文详解(七) gdb、strace跟踪系统调用

本文介绍了gdb、strace通过ptrace监控被调试程序的所有系统调用的实现原理。

2025-04-25 23:43:16 1113

原创 linux ptrace 图文详解(六) gdb单步调试

本文介绍了gdb单步调试的底层实现原理以及代码细节。

2025-04-18 21:52:13 1096

原创 linux ptrace 图文详解(五) gdb设置硬断点、观察点

本文详细介绍了armv8中硬断点、观察点的实现原理,以及相关debug寄存器中各字段的含义。

2025-04-04 14:06:19 1091

原创 linux ptrace 图文详解(四) gdb设置软断点

本文介绍了gdb中软断点的实现原理,以及软断点触发后内核的处理逻辑。

2025-03-29 16:04:35 1853 2

原创 linux ptrace 图文详解(三) PTRACE_ATTACH 跟踪程序

本文讲述了gdb attach的底层实现原理。

2025-03-22 09:01:54 1074

原创 linux ptrace 图文详解(二) PTRACE_TRACEME 跟踪程序

本文介绍了gdb加载被调试程序进行调试运行的底层实现原理:PTRACE_TRACEME 的实现细节。

2025-03-14 23:56:26 1719

原创 linux ptrace 图文详解(一)基础介绍

ptrace 是 linux内核 提供的一个系统调用,并非一个标准的posix接口,ptrace 主要用于进程跟踪和调试。它运行一个用户态进程(通常称为跟踪器, Tracer)控制和监视另一个进程(称为被调试进程, Tracee)的执行。ptrace是许多调试跟踪工具(如:GDB、strace 等)的 “基座”,其函数原型如下:用于标识一个需要执行的操作;标识目标线程ID一个内存地址和附加信息,其语义因选择的操作而不同;

2025-03-08 14:09:02 2056

原创 ARM Generic Timer

6.3.1,架构:arm64)

2025-02-22 20:41:23 1344

原创 Linux uprobe 图文详解(四)uretprobe 针对 longjmp/setjmp 的处理

本文介绍了 setjmp/longjmp 的实现原理、使用陷阱,以及uretprobe中针对 longjmp导致程序流改变 后的相应处理细节!

2025-02-15 12:05:49 735

原创 Linux uprobe 图文详解(三)fork/spawn/exec针对uprobe的处理

在前面两篇文章中,详细介绍了 uprobe、uretprobe 的实现原理。本文将针对 fork、spawn、exec 系统调用中对uprobe的相关处理进行介绍。我们知道,uprobe/uretprobe可以对用户态程序进行实时打桩进行探测,而被打桩的用户态程序,在执行的过程中有可能会调用到 fork、spawn、exec 这一系列系统调用。这些场景下,同样需要针对uprobe进行相关处理。

2025-02-08 23:16:46 782

原创 Linux uprobe 图文详解(二)uretprobe实现原理

上篇文章中介绍了uprobe的实现原理,本篇将继续讲述uretprobe的实现原理。uretprobe是一种基于uprobe的函数级别探测技术,用于探测用户态程序某个具体函数的入口点、返回点。在函数的入口、返回时,会调用响应的钩子函数,该技术一般用于获取:函数运行时间函数返回值等信息。

2025-01-25 21:05:54 971

原创 Linux uprobe 图文详解(一)uprobe实现原理

本文详细介绍了arm64下uprobe的详细实现原理!

2025-01-18 09:32:04 1495

原创 Linux rmap反向映射 实现原理 图文详解 【硬核干货】

本文结合源码、图文,深度剖析了 linux rmap 反向映射技术的底层实现原理。

2025-01-12 16:36:01 1398

原创 Linux SPARSEMEM_VMEMMAP 内存模型

本文阐述了linux内核如果实现page对象的管理、以及 page虚拟地址 与 物理内存 之间的转换方式

2024-12-14 23:19:00 490

原创 微内核 ChCore IPC 图文详解

图文详解ChCore微内核的IPC实现机制

2024-12-14 22:39:36 1259

原创 【原创】Linux kprobe 实现原理 图文详解 (四) 指令替换、cpu stopper

本文主要介绍kprobe指令替换的细节,并介绍cpu stopper机制的实现原理

2024-11-06 13:20:37 1501

原创 【原创】Linux kprobe 实现原理 图文详解 (三) kprobe跳转优化

图文详细介绍kprobe跳转优化的底层实现原理

2024-11-05 14:41:32 866

原创 【原创】Linux kprobe 实现原理 图文详解 (二) kretprobe实现原理

目录一、kretprobe 基本介绍二、kretprobe 使用示例三、kretprobe 实现原理四、具体代码(代码:linux 6.3.1,架构:arm64)One look is worth a thousand words. —— Tess Flanders一、kretprobe 基本介绍Kretprobe是一种基于Kprobe的探测技术,用于探测内核函数的入口点、返回点。在这两处可以调用用户注册的钩子函数,该技术一般用于获取:函数运行时间、函数返回

2024-11-04 13:27:37 2198

原创 【原创】Linux kprobe 实现原理 图文详解 (一) kprobe实现原理

图文详解 linux kprobe 底层实现原理

2024-11-03 11:03:35 1974 1

aarch64 xv6 源码

aarch64 xv6 源码

2025-09-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除