<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[h_b__k的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/h_b__k</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; h_b__k]]></copyright><item><title><![CDATA[xv6 源码精读（二）开启MMU、一致性映射页表]]></title><link>https://blog.csdn.net/h_b__k/article/details/151591209</link><guid>https://blog.csdn.net/h_b__k/article/details/151591209</guid><author>h_b__k</author><pubDate>Tue, 21 Oct 2025 22:07:48 +0800</pubDate><description><![CDATA[本文通过xv6 aarch64，介绍了armv8架构下MMU相关的一些知识，包括一致性页表、页表翻译、页表描述符属性等。]]></description><category></category></item><item><title><![CDATA[xv6 源码精读（一）环境搭建]]></title><link>https://blog.csdn.net/h_b__k/article/details/151372310</link><guid>https://blog.csdn.net/h_b__k/article/details/151372310</guid><author>h_b__k</author><pubDate>Tue, 09 Sep 2025 23:09:46 +0800</pubDate><description><![CDATA[xv6 是由麻省理工学院（MIT）开发的一个现代化的教学用操作系统，xv6 是在经典的Unix V6基础上进行现代化重写，以适应现代处理器架构。xv6支持任务调度、进程间通信、文件系统、多核启动、以及设备虚拟化。对于对操作系统感兴趣的学生和研究人员来说，xv6是一个很好的学习平台。﻿。]]></description><category></category></item><item><title><![CDATA[Linux signal 图文详解（三）信号处理]]></title><link>https://blog.csdn.net/h_b__k/article/details/151122455</link><guid>https://blog.csdn.net/h_b__k/article/details/151122455</guid><author>h_b__k</author><pubDate>Fri, 05 Sep 2025 01:26:35 +0800</pubDate><description><![CDATA[信号处理在内核中的实现，主要就是获取pending信号，为pending信号设置好用户栈、寄存器上下文。当用户态信号处理完毕后，会借助sigreturn通过svc的方式再次陷入内核，进而恢复到原本的用户态上下文。]]></description><category></category></item><item><title><![CDATA[Linux signal 图文详解（二）信号发送]]></title><link>https://blog.csdn.net/h_b__k/article/details/151016347</link><guid>https://blog.csdn.net/h_b__k/article/details/151016347</guid><author>h_b__k</author><pubDate>Mon, 01 Sep 2025 23:34:42 +0800</pubDate><description><![CDATA[Linux中，信号（signal）是进程间通信的一种重要机制，用于通知进程、线程、进程组发生了某种事件。1）kill 系统调用/** - pid：目标进程 ID，特殊值含义：* pid > 0：发送信号给 ID 为 pid 的进程* pid = 0：发送信号给与当前进程同组的所有进程* pid = -1：发送信号给所有有权限发送的进程（除了 init 进程）* pid < -1：发送信号给进程组 ID 为 |pid| 的所有进程。]]></description><category></category></item><item><title><![CDATA[Linux signal 图文详解（一）信号简介、信号注册]]></title><link>https://blog.csdn.net/h_b__k/article/details/150965833</link><guid>https://blog.csdn.net/h_b__k/article/details/150965833</guid><author>h_b__k</author><pubDate>Sat, 30 Aug 2025 00:25:11 +0800</pubDate><description><![CDATA[信号机制是在软件层面上对中断机制的一种模拟。两者之间不仅是概念上类似，实现上也相类似。就像中断机制中有一个“中断向量表”一样，在每个进程的task_struct中都有指针sig，指向一个signal_struct结构。在中断机制中，每种中断请求都可以加以屏蔽而不让处理器对之做出响应，在信号机制中也有类似手段。在所有进程间通讯机制中，只有信号是异步的。对信号的检测与响应总是发生在内核态task由于系统调用、中断或异常陷入内核后，从内核态返回到用户态的前夕；]]></description><category></category></item><item><title><![CDATA[Linux coredump原理 图文详解]]></title><link>https://blog.csdn.net/h_b__k/article/details/150465936</link><guid>https://blog.csdn.net/h_b__k/article/details/150465936</guid><author>h_b__k</author><pubDate>Sun, 24 Aug 2025 12:51:39 +0800</pubDate><description><![CDATA[本文介绍了coreudmp文件的组成内容，以及一个程序发生crash后的完整处理流程。用户态程序crash后，主要借助内核的信号机制，完成所有线程的同步、以及各种corner case的处理，最终由触发crash的线程，在内核态中完成coredump文件的生成工作，完成后所有线程都会走常规的退出流程。]]></description><category></category></item><item><title><![CDATA[Linux copy_from_user/copy_to_user 底层原理]]></title><link>https://blog.csdn.net/h_b__k/article/details/148800779</link><guid>https://blog.csdn.net/h_b__k/article/details/148800779</guid><author>h_b__k</author><pubDate>Sat, 21 Jun 2025 18:37:18 +0800</pubDate><description><![CDATA[在Linux中，用户空间（User Space）和内核空间（Kernel Space）是相互隔离的，用户空间的程序无法直接访问内核空间的内存，反之亦然。然而，在实际应用中，用户程序经常需要与内核进行数据交换，比如通过系统调用（System Call）传递参数或读取内核数据。为了安全高效地完成这种跨空间的数据拷贝，Linux内核提供了copy_from_user和copy_to_user这两个关键接口。它们的主要作用是：：将数据从用户空间安全地拷贝到内核空间。：将数据从内核空间安全地拷贝到用户空间。]]></description><category></category></item><item><title><![CDATA[linux ptrace 图文详解（九） gdb如何判断被tracee唤醒的原因]]></title><link>https://blog.csdn.net/h_b__k/article/details/148175520</link><guid>https://blog.csdn.net/h_b__k/article/details/148175520</guid><author>h_b__k</author><pubDate>Fri, 23 May 2025 20:53:03 +0800</pubDate><description><![CDATA[前序文章中，讨论了绝大多数 ptrace系统调用 在 gdb 中的使用场景，这些场景中有一个共同点：被调试程序（即：tracee）最终都会给父进程GDB发送SIGCHLD信号，并唤醒GDB的wait系统调用。这其中有一个很重要的点，前序文章中并没有展开详细讲解：GDB被唤醒后，是如何判断自己是被什么事件唤醒的、以及是被哪个调试任务唤醒的，被调试程序发生了什么事情？]]></description><category></category></item><item><title><![CDATA[linux ptrace 图文详解（八） gdb跟踪被调试程序的子线程、子进程]]></title><link>https://blog.csdn.net/h_b__k/article/details/147837180</link><guid>https://blog.csdn.net/h_b__k/article/details/147837180</guid><author>h_b__k</author><pubDate>Fri, 09 May 2025 22:43:27 +0800</pubDate><description><![CDATA[本文介绍了gdb调试程序时，如何跟踪被调试程序创建的子进程/子线程。]]></description><category></category></item><item><title><![CDATA[linux ptrace 图文详解（七） gdb、strace跟踪系统调用]]></title><link>https://blog.csdn.net/h_b__k/article/details/147522225</link><guid>https://blog.csdn.net/h_b__k/article/details/147522225</guid><author>h_b__k</author><pubDate>Fri, 25 Apr 2025 23:43:16 +0800</pubDate><description><![CDATA[本文介绍了gdb、strace通过ptrace监控被调试程序的所有系统调用的实现原理。]]></description><category></category></item><item><title><![CDATA[linux ptrace 图文详解（六） gdb单步调试]]></title><link>https://blog.csdn.net/h_b__k/article/details/147340523</link><guid>https://blog.csdn.net/h_b__k/article/details/147340523</guid><author>h_b__k</author><pubDate>Fri, 18 Apr 2025 21:52:13 +0800</pubDate><description><![CDATA[本文介绍了gdb单步调试的底层实现原理以及代码细节。]]></description><category></category></item><item><title><![CDATA[linux ptrace 图文详解（五） gdb设置硬断点、观察点]]></title><link>https://blog.csdn.net/h_b__k/article/details/146988924</link><guid>https://blog.csdn.net/h_b__k/article/details/146988924</guid><author>h_b__k</author><pubDate>Fri, 04 Apr 2025 14:06:19 +0800</pubDate><description><![CDATA[本文详细介绍了armv8中硬断点、观察点的实现原理，以及相关debug寄存器中各字段的含义。]]></description><category></category></item><item><title><![CDATA[linux ptrace 图文详解（四） gdb设置软断点]]></title><link>https://blog.csdn.net/h_b__k/article/details/146611655</link><guid>https://blog.csdn.net/h_b__k/article/details/146611655</guid><author>h_b__k</author><pubDate>Sat, 29 Mar 2025 16:04:35 +0800</pubDate><description><![CDATA[本文介绍了gdb中软断点的实现原理，以及软断点触发后内核的处理逻辑。]]></description><category></category></item><item><title><![CDATA[linux ptrace 图文详解（三） PTRACE_ATTACH 跟踪程序]]></title><link>https://blog.csdn.net/h_b__k/article/details/146431267</link><guid>https://blog.csdn.net/h_b__k/article/details/146431267</guid><author>h_b__k</author><pubDate>Sat, 22 Mar 2025 09:01:54 +0800</pubDate><description><![CDATA[本文讲述了gdb attach的底层实现原理。]]></description><category></category></item><item><title><![CDATA[linux ptrace 图文详解（二） PTRACE_TRACEME 跟踪程序]]></title><link>https://blog.csdn.net/h_b__k/article/details/146267447</link><guid>https://blog.csdn.net/h_b__k/article/details/146267447</guid><author>h_b__k</author><pubDate>Fri, 14 Mar 2025 23:56:26 +0800</pubDate><description><![CDATA[本文介绍了gdb加载被调试程序进行调试运行的底层实现原理：PTRACE_TRACEME 的实现细节。]]></description><category></category></item><item><title><![CDATA[linux ptrace 图文详解（一）基础介绍]]></title><link>https://blog.csdn.net/h_b__k/article/details/146105115</link><guid>https://blog.csdn.net/h_b__k/article/details/146105115</guid><author>h_b__k</author><pubDate>Sat, 08 Mar 2025 14:09:02 +0800</pubDate><description><![CDATA[ptrace 是 linux内核 提供的一个系统调用，并非一个标准的posix接口，ptrace 主要用于进程跟踪和调试。它运行一个用户态进程（通常称为跟踪器, Tracer）控制和监视另一个进程（称为被调试进程, Tracee）的执行。ptrace是许多调试跟踪工具（如：GDB、strace 等）的 “基座”，其函数原型如下：用于标识一个需要执行的操作；标识目标线程ID一个内存地址和附加信息，其语义因选择的操作而不同；]]></description><category></category></item><item><title><![CDATA[ARM Generic Timer ]]></title><link>https://blog.csdn.net/h_b__k/article/details/145766239</link><guid>https://blog.csdn.net/h_b__k/article/details/145766239</guid><author>h_b__k</author><pubDate>Sat, 22 Feb 2025 20:41:23 +0800</pubDate><description><![CDATA[6.3.1，架构：arm64）]]></description><category></category></item><item><title><![CDATA[Linux uprobe 图文详解（四）uretprobe 针对 longjmp/setjmp 的处理]]></title><link>https://blog.csdn.net/h_b__k/article/details/145641397</link><guid>https://blog.csdn.net/h_b__k/article/details/145641397</guid><author>h_b__k</author><pubDate>Sat, 15 Feb 2025 12:05:49 +0800</pubDate><description><![CDATA[本文介绍了 setjmp/longjmp 的实现原理、使用陷阱，以及uretprobe中针对 longjmp导致程序流改变 后的相应处理细节！]]></description><category></category></item><item><title><![CDATA[Linux uprobe 图文详解（三）fork/spawn/exec针对uprobe的处理]]></title><link>https://blog.csdn.net/h_b__k/article/details/145523399</link><guid>https://blog.csdn.net/h_b__k/article/details/145523399</guid><author>h_b__k</author><pubDate>Sat, 08 Feb 2025 23:16:46 +0800</pubDate><description><![CDATA[在前面两篇文章中，详细介绍了 uprobe、uretprobe 的实现原理。本文将针对 fork、spawn、exec 系统调用中对uprobe的相关处理进行介绍。我们知道，uprobe/uretprobe可以对用户态程序进行实时打桩进行探测，而被打桩的用户态程序，在执行的过程中有可能会调用到 fork、spawn、exec 这一系列系统调用。这些场景下，同样需要针对uprobe进行相关处理。]]></description><category></category></item><item><title><![CDATA[Linux uprobe 图文详解（二）uretprobe实现原理]]></title><link>https://blog.csdn.net/h_b__k/article/details/145358191</link><guid>https://blog.csdn.net/h_b__k/article/details/145358191</guid><author>h_b__k</author><pubDate>Sat, 25 Jan 2025 21:05:54 +0800</pubDate><description><![CDATA[上篇文章中介绍了uprobe的实现原理，本篇将继续讲述uretprobe的实现原理。uretprobe是一种基于uprobe的函数级别探测技术，用于探测用户态程序某个具体函数的入口点、返回点。在函数的入口、返回时，会调用响应的钩子函数，该技术一般用于获取：函数运行时间函数返回值等信息。]]></description><category></category></item></channel></rss>