<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[pigstor的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/pigstor</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; pigstor]]></copyright><item><title><![CDATA[eBPF(7)--fentry/fmodify_return/fexit]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/148723622</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/148723622</guid><author>pigstor</author><pubDate>Tue, 17 Jun 2025 20:49:26 +0800</pubDate><description><![CDATA[BPF蹦床机制是一种零开销的跟踪方案，可作为kprobe和tracepoint的替代。它支持在函数入口(fentry)、出口(fexit)和返回值修改(fmodify_return)三个关键点进行插桩，且无需BPF帮助函数即可直接访问参数。该机制利用内核的NOP指令替换技术，通过动态修改函数开头指令实现跟踪功能。与传统ftrace相比，BPF蹦床提供了更灵活的插桩方式，包括完全替换原始程序(freplace)、前置/后置执行以及修改返回值等能力，为系统调试和故障排查提供了强大支持。]]></description><category></category></item><item><title><![CDATA[eBPF(6)--uprobe]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/148723423</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/148723423</guid><author>pigstor</author><pubDate>Tue, 17 Jun 2025 20:46:25 +0800</pubDate><description><![CDATA[摘要：uprobe是一种用户空间探针技术，通过在二进制文件中插入断点指令实现动态插桩。它支持在函数入口/出口处插桩，并覆盖所有使用该二进制文件的进程。文章介绍了libbpf中的uprobe相关API（如bpf_program__attach_uprobe），详细展示了如何编写目标程序（需-g编译保留符号信息）、编写BPF探测程序（使用SEC和BPF_KPROBE宏），以及用户空间如何加载BPF程序进行插桩。通过实例演示了对test_add/test_sub函数的入口/出口监控，输出结果验证了uprobe的成]]></description><category></category></item><item><title><![CDATA[eBPF(5)--raw tracepoint程序类型]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/148566514</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/148566514</guid><author>pigstor</author><pubDate>Tue, 10 Jun 2025 19:16:43 +0800</pubDate><description><![CDATA[摘要：BPF raw tracepoint机制可用于系统调用追踪，通过查看/sys/kernel/debug/tracing/available_events获取可用事件。使用时需定义SEC(raw_tp/&lt;name&gt;)函数，上下文结构为bpf_raw_tracepoint_args。以sys_enter为例，可获取系统调用号和参数，并通过PT_REGS_PARM宏读取寄存器参数。示例展示了如何追踪unlinkat系统调用，提取其文件路径参数。]]></description><category></category></item><item><title><![CDATA[eBPF(4)--tracepoint程序类型]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/148566456</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/148566456</guid><author>pigstor</author><pubDate>Tue, 10 Jun 2025 19:11:50 +0800</pubDate><description><![CDATA[《BPFtrace跟踪点上下文解析方法》 摘要： 本文介绍了BPFtrace中跟踪点(tracepoint)的上下文处理方法。首先通过bpftrace -l &quot;tracepoint:*:*&quot;命令列出所有可用插桩点，然后通过系统文件查看具体跟踪点的上下文格式。文章详细说明了两种处理上下文的方式：1)自定义结构体方法，需根据/sys/kernel/tracing/events下的事件格式文件重构上下文结构体；2)使用vmlinux.h预定义的结构体，但需注意并非所有跟踪点都有预定义结构。]]></description><category></category></item><item><title><![CDATA[eBPF(3)--BPF映射(Maps)]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/148518255</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/148518255</guid><author>pigstor</author><pubDate>Sun, 08 Jun 2025 20:54:47 +0800</pubDate><description><![CDATA[eBPF映射是内核与用户空间共享数据的关键机制，支持多种交互方式。摘要介绍了eBPF映射的基本概念、定义方法（包括内核态和用户态创建），以及环形缓冲区等特殊映射的使用。重点阐述了通过BPF系统调用和libbpf库操作映射的API，并提供了实践案例展示进程监控的实现。该技术可实现高效的数据共享，适用于性能监控、安全检测等场景，代码结构具有通用性。]]></description><category></category></item><item><title><![CDATA[eBPF(2)--代码通用架构]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/148460866</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/148460866</guid><author>pigstor</author><pubDate>Thu, 05 Jun 2025 23:53:52 +0800</pubDate><description><![CDATA[本文介绍了BPF程序的开发流程，重点讲解了skel骨架文件的生成和使用。通过bpftool工具可以生成包含BPF操作结构体的头文件，简化BPF程序的加载。文中详细说明了如何生成vmlinux.h内核类型定义文件，并演示了修改后的hello_kernel.c和hello_user.c程序，展示了完整的Makefile编译配置。最终生成的BPF程序可通过trace_pipe查看输出。该流程充分利用了BPF的CO-RE技术，实现了一次编译多处运行的特性，同时通过骨架文件简化了用户空间与内核空间的交互。]]></description><category></category></item><item><title><![CDATA[eBPF(1)--基础知识简介]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/148459439</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/148459439</guid><author>pigstor</author><pubDate>Thu, 05 Jun 2025 21:56:49 +0800</pubDate><description><![CDATA[eBPF（Extended Berkeley Packet Filter）是一种在内核运行沙箱程序的技术，允许非内核开发者安全地注入代码以控制内核行为。它从最初的数据包过滤扩展到网络、安全、跟踪等领域，具有安全性（通过验证器校验）、高效性（借助JIT编译器）和标准化（BPFHelpers等接口）特点。eBPF程序分为用户态和内核态两部分，支持多种程序类型如跟踪（kprobe、tracepoint）、网络（xdp）和安全（lsm）。开发工具包括LLVM、libbpf和BCC等，生态完善。实践示例展示了如何编写]]></description><category></category></item><item><title><![CDATA[ubuntu + pyocd + 正点原子 DAPLink 搭建STM32H562 下载环境]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/143608470</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/143608470</guid><author>pigstor</author><pubDate>Thu, 07 Nov 2024 22:27:53 +0800</pubDate><description><![CDATA[pyocd下载与使用]]></description><category></category></item><item><title><![CDATA[C语言二叉树]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139634626</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139634626</guid><author>pigstor</author><pubDate>Wed, 12 Jun 2024 19:13:48 +0800</pubDate><description><![CDATA[每个子节点最多只有两个子节点，并且两个子节点要按照一定顺序排列左节点和右节点。]]></description><category></category></item><item><title><![CDATA[Linux下得内存布局]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139634593</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139634593</guid><author>pigstor</author><pubDate>Wed, 12 Jun 2024 19:10:21 +0800</pubDate><description><![CDATA[运行栈：保存局部变量和形参，每调用一个函数就会相应的产生数据存放到栈中，函数结束时就会释放函数中的局部变量。运行堆：程序员自主操控的内存，自定义生命周期，malloc()/calloc()/realloc().rodata		只读数据（常量区），比如	100，3.14，‘w’，“hello”.data		已经初始化的静态数据（全局变量和static 声明的局部变量）.init	用于启动代码，调用main函数，并传入argc,argv参数。在LINUX下 执行 gcc main.c -o main。]]></description><category></category></item><item><title><![CDATA[c语言柔性数组]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139565770</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139565770</guid><author>pigstor</author><pubDate>Sun, 09 Jun 2024 20:29:39 +0800</pubDate><description><![CDATA[在一个结构体中，通常我们会发送一些固定的内容，例如两个人发消息，每次发送的字数不一定，有时多，有时少，我们定义msg字符串时，就不知道定义多少，这时候使用柔性数组。]]></description><category></category></item><item><title><![CDATA[c语言变参函数]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139565757</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139565757</guid><author>pigstor</author><pubDate>Sun, 09 Jun 2024 20:28:37 +0800</pubDate><description><![CDATA[【代码】c语言变参函数。]]></description><category></category></item><item><title><![CDATA[Linux下简单shell命令]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139552138</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139552138</guid><author>pigstor</author><pubDate>Sat, 08 Jun 2024 22:19:05 +0800</pubDate><description><![CDATA[【代码】Linux下简单shell命令。]]></description><category></category></item><item><title><![CDATA[C语言二叉平衡搜索树]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139552127</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139552127</guid><author>pigstor</author><pubDate>Sat, 08 Jun 2024 22:17:50 +0800</pubDate><description><![CDATA[【代码】C语言二叉平衡搜索树。]]></description><category></category></item><item><title><![CDATA[C语言循环队列实现]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139509730</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139509730</guid><author>pigstor</author><pubDate>Thu, 06 Jun 2024 20:46:56 +0800</pubDate><description><![CDATA[5。]]></description><category></category></item><item><title><![CDATA[C语言栈结构实现]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139509695</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139509695</guid><author>pigstor</author><pubDate>Thu, 06 Jun 2024 20:44:47 +0800</pubDate><description><![CDATA[通过next指针指向下一个数据，用一个大的结构体来存放top和size。好处是不用先指定栈的大小。]]></description><category></category></item><item><title><![CDATA[Linux内核链表源代码]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139481800</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139481800</guid><author>pigstor</author><pubDate>Wed, 05 Jun 2024 20:46:37 +0800</pubDate><description><![CDATA[/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_LIST_H
#define _LINUX_LIST_H

#include &lt;linux/types.h&gt;
#include &lt;linux/stddef.h&gt;
#include &lt;linux/poison.h&gt;
#include &lt;linux/const.h&gt;
#include &lt;linux/kernel.h&gt;

/*
 * Simple ]]></description><category></category></item><item><title><![CDATA[c语言链表]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139481759</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139481759</guid><author>pigstor</author><pubDate>Wed, 05 Jun 2024 20:45:08 +0800</pubDate><description><![CDATA[缺点：每一个节点都是特殊的，导致每一条链表也是特殊的，因此每一种链表的增删查改也是特殊的。所以针对不同数据要写不同的链表，代码不能复用。当一个节点处于变化的数据结构网络中时，节点指针无法指向稳定不变的节点。实现原理：将只有双向链表逻辑的小结构体，放入有具体数据的大结构体中。]]></description><category></category></item><item><title><![CDATA[C语言顺序表]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139452517</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139452517</guid><author>pigstor</author><pubDate>Tue, 04 Jun 2024 19:50:54 +0800</pubDate><description><![CDATA[使用c语言实现顺序表]]></description><category></category></item><item><title><![CDATA[C语言文件IO]]></title><link>https://blog.youkuaiyun.com/pigstor/article/details/139424166</link><guid>https://blog.youkuaiyun.com/pigstor/article/details/139424166</guid><author>pigstor</author><pubDate>Mon, 03 Jun 2024 20:45:45 +0800</pubDate><description><![CDATA[1、通过读写文件时，每次操作都会执行相关系统调用。这样处理的。可以看成是在文件IO的基础上封装了。先读写缓冲区，必要时再访问实际文件，从而。2、  文件IO中用文件描述符表现一个打开的文件，可以访问不同类型的文件，如普通文件、设备文件和管道文件等。而标准IO中用FILE（流）表示一个打开的文件，通常只用来访问普通文件。3、需要的使用系统IO,例如各种设备文件.  否则一般使用标准IO.]]></description><category></category></item></channel></rss>