- 博客(19)
- 收藏
- 关注
原创 eBPF(5)--raw tracepoint程序类型
摘要:BPF raw tracepoint机制可用于系统调用追踪,通过查看/sys/kernel/debug/tracing/available_events获取可用事件。使用时需定义SEC(raw_tp/<name>)函数,上下文结构为bpf_raw_tracepoint_args。以sys_enter为例,可获取系统调用号和参数,并通过PT_REGS_PARM宏读取寄存器参数。示例展示了如何追踪unlinkat系统调用,提取其文件路径参数。
2025-06-10 19:16:43
156
原创 eBPF(4)--tracepoint程序类型
《BPFtrace跟踪点上下文解析方法》 摘要: 本文介绍了BPFtrace中跟踪点(tracepoint)的上下文处理方法。首先通过bpftrace -l "tracepoint:*:*"命令列出所有可用插桩点,然后通过系统文件查看具体跟踪点的上下文格式。文章详细说明了两种处理上下文的方式:1)自定义结构体方法,需根据/sys/kernel/tracing/events下的事件格式文件重构上下文结构体;2)使用vmlinux.h预定义的结构体,但需注意并非所有跟踪点都有预定义结构。
2025-06-10 19:11:50
273
原创 eBPF(3)--BPF映射(Maps)
eBPF映射是内核与用户空间共享数据的关键机制,支持多种交互方式。摘要介绍了eBPF映射的基本概念、定义方法(包括内核态和用户态创建),以及环形缓冲区等特殊映射的使用。重点阐述了通过BPF系统调用和libbpf库操作映射的API,并提供了实践案例展示进程监控的实现。该技术可实现高效的数据共享,适用于性能监控、安全检测等场景,代码结构具有通用性。
2025-06-08 20:54:47
355
原创 eBPF(2)--代码通用架构
本文介绍了BPF程序的开发流程,重点讲解了skel骨架文件的生成和使用。通过bpftool工具可以生成包含BPF操作结构体的头文件,简化BPF程序的加载。文中详细说明了如何生成vmlinux.h内核类型定义文件,并演示了修改后的hello_kernel.c和hello_user.c程序,展示了完整的Makefile编译配置。最终生成的BPF程序可通过trace_pipe查看输出。该流程充分利用了BPF的CO-RE技术,实现了一次编译多处运行的特性,同时通过骨架文件简化了用户空间与内核空间的交互。
2025-06-05 23:53:52
706
原创 eBPF(1)--基础知识简介
eBPF(Extended Berkeley Packet Filter)是一种在内核运行沙箱程序的技术,允许非内核开发者安全地注入代码以控制内核行为。它从最初的数据包过滤扩展到网络、安全、跟踪等领域,具有安全性(通过验证器校验)、高效性(借助JIT编译器)和标准化(BPFHelpers等接口)特点。eBPF程序分为用户态和内核态两部分,支持多种程序类型如跟踪(kprobe、tracepoint)、网络(xdp)和安全(lsm)。开发工具包括LLVM、libbpf和BCC等,生态完善。实践示例展示了如何编写
2025-06-05 21:56:49
845
原创 Linux下得内存布局
运行栈:保存局部变量和形参,每调用一个函数就会相应的产生数据存放到栈中,函数结束时就会释放函数中的局部变量。运行堆:程序员自主操控的内存,自定义生命周期,malloc()/calloc()/realloc().rodata 只读数据(常量区),比如 100,3.14,‘w’,“hello”.data 已经初始化的静态数据(全局变量和static 声明的局部变量).init 用于启动代码,调用main函数,并传入argc,argv参数。在LINUX下 执行 gcc main.c -o main。
2024-06-12 19:10:21
236
原创 c语言柔性数组
在一个结构体中,通常我们会发送一些固定的内容,例如两个人发消息,每次发送的字数不一定,有时多,有时少,我们定义msg字符串时,就不知道定义多少,这时候使用柔性数组。
2024-06-09 20:29:39
220
原创 Linux内核链表源代码
/* SPDX-License-Identifier: GPL-2.0 */#ifndef _LINUX_LIST_H#define _LINUX_LIST_H#include <linux/types.h>#include <linux/stddef.h>#include <linux/poison.h>#include <linux/const.h>#include <linux/kernel.h>/* * Simple
2024-06-05 20:46:37
1589
原创 c语言链表
缺点:每一个节点都是特殊的,导致每一条链表也是特殊的,因此每一种链表的增删查改也是特殊的。所以针对不同数据要写不同的链表,代码不能复用。当一个节点处于变化的数据结构网络中时,节点指针无法指向稳定不变的节点。实现原理:将只有双向链表逻辑的小结构体,放入有具体数据的大结构体中。
2024-06-05 20:45:08
295
原创 C语言文件IO
1、通过读写文件时,每次操作都会执行相关系统调用。这样处理的。可以看成是在文件IO的基础上封装了。先读写缓冲区,必要时再访问实际文件,从而。2、 文件IO中用文件描述符表现一个打开的文件,可以访问不同类型的文件,如普通文件、设备文件和管道文件等。而标准IO中用FILE(流)表示一个打开的文件,通常只用来访问普通文件。3、需要的使用系统IO,例如各种设备文件. 否则一般使用标准IO.
2024-06-03 20:45:45
1525
1
原创 UE4学习
UE4学习目录一、UE4灰度图导入一、UE4灰度图导入 首先在搜索引擎上搜索到一张灰度图,通过PS打开,将其模式改为灰度、16通道,并导出为png文件格式。UE4只支持png格式的灰度图。
2020-11-06 11:09:04
265
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人