1.3 eBPF的工作原理初探

news2024/12/31 3:38:15

写在前面

    上一节提到过,eBPF程序是面向BPF体系结构指令集编写的,它并不直接运行在Linux内核中,我们可以理解为它是运行在eBPF虚拟机,由eBPF虚拟机来执行eBPF字节码,就像java运行在jvm一样。

    我们用一张原理图来看下eBPF程序的编译,加载,验证,钩子,映射等结点。

 如上是详细的eBPF的工作流程,首先eBPF程序是一个C语言编写的代码源文件bpf_prog.c,通过LLVM将源文件编译成bpf_prog.o对象文件(ELF)。用户空间通过BPF ELF加载器(如libbpf)解析然后通过bpf()系统调用将其加载到内核当中。内核会通过Verifier对其进行验证,验证通过后对其执行即时编译(JIT),并创建eBPF Map,并将eBPF Map的文件描述符返回给程序,最后eBPF程序会在内核插入钩子,当被相关事件触发后,eBPF程序会启动执行,用辅助函数和 Map 来对数据进行存储和操作。在用户空间运行的程序就可以通过前面返回到文件描述符来访问并操作eBPF Map。所以我们通常说eBPF Map(文件描述符)是用户空间和内核空间之间的数据交换、信息传递的桥梁。

一,Hook概览

    如前面提到的,eBPF程序是事件驱动的,在内核或应用程序通过某个钩点(Hook Point)的时候触发其运行。预定义的钩子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/596605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab查找整行为0的行号并记录

find函数 该函数可以查找非零元素的索引和值 例如: X 331 0 20 1 10 0 4 k find(X) %返回非零元素的索引号,即按列检索对应数值的序号 k_0 find(~X) %返回零元素的索引号 matlab检索索引号的方式如下:输出结…

CDN之域名管理操作流程简介

一、火伞云端配置 1、点击“域名管理”,找到需要配置的域名,点击“常规配置” 2、进入“域名配置”界面,点击“配置我的CNAME” 3、将要配置的CNAME配置到我的DNS,请复制此处的CNAME地址,同时打开您网站所属的DNS服务…

Linux 扩展磁盘空间

1. 为什么我的 Linux 磁盘空间不够用?/ 插入新的磁盘要怎么用? [注]:第一节基本是一些啰里啰唆的内容,想直接看如何操作,请直接跳转至第二小节🧐 很多人遇到这样的问题,当给一台新的主机安装上…

MySQL报错cannot add foreign key constraint解决方法

1 问题场景 利用Navicat对MySQL两张表想要进行外键关联时设置正确,但出现出现如下错误 2 原因分析 创建外键错误的原因大概有一下几个原因: 1、关联的两个字段的字段的类型不一致 2、设置外键删除时set null 3、两张表的引擎不一致 2.1 数据类型不一…

2023 下半年程序员生存指南!

见字如面,我是军哥! 最近看到 4 月份,我国青年失业率 20.4%,说实话这个数字相当的高呀! 另外,伴随最近若干大厂裁员,就这周就有两位读者跟我说被裁员了,我估计下半年的 IT 行业更是艰…

BR 5AP1130.156C-000

物料号: 5AP1130.156C-000 描述: 自动化装置面板 15.6" FullHD TFT - 1920 x 1080 像素 (16:9) - 多点触控(投射电容) - 开关柜安装 - 横向 - 用于 PPC900/PPC2100/PPC3100/ 联接模块 B&R ID 代码0xEC5D许可证 显示屏 类型TFT 彩色对角线…

ChatGPT 插件:深入探讨 OpenAI 的新功能及其如何改变我们使用 AI 的方式

OpenAI的API现在正在为成千上万的商业和开源项目和应用程序提供AI动力。而在推出六个月后,ChatGPT的插件终于加入了机智的聊天机器人,能够更好的应用在不同的场景中。 🔌 什么是ChatGPT插件? ChatGPT插件是专门的扩展&#xff0…

报错:dll不是有效的win32应用程序

学习如何创建并调用动态库时,新建了一个项目用于调用自己创建的动态库,如下: 其中Dll3是新创建的动态库,text3是新建的另一个项目用于调用Dll3动态库,运行时报错如下: 原因在于Dll3动态库是默认的启动项目…

得物 H5容器 野指针疑难问题排查 解决

1背景 得物 iOS 4.9.x 版本 上线后,一些带有横向滚动内容的h5页面,有一个webkit 相关crash增加较快。通过Crash堆栈判断是UIScrollview执行滚动动画过程中内存野指针导致的崩溃。 2前期排查 通过页面浏览日志,发现发生崩溃时所在的页面都是…

C/C++数据类型从0到内存具体分配详解

一,数据类型分类 1.整形家族:char , short , int , long , long long , unsigned int , unsigned char , unsinged short , unsigned long , unsinged long long 。(为什么将char归入整形家族是因为字符在机器中是以Ascll码值储存的&#…

分类管理你的联系人,有效提升营销转化率!

电子邮件营销已成为外贸和跨境电商企业宣传产品和服务的必不可少的工具。在电子邮件营销中,电子邮件联系人列表的质量对活动的成功至关重要。提高联系人名单质量的途径之一就是对联系人进行分类管理。本文将讨论为邮件联系人为什么要分类管理? 1、提高活…

风险投资成功案例分析_著名的风投成功案例

风险投资成功案例分析1 转换科技公司(Transition Technology Inc.以下简称TTI)在1987年初开始寻求风险资本,直到212天后终于获得了3i风险投资公司(以下简称3i)等提供的300万美元风险资本。这是一个比较常规的风险投资过程,但其中的曲折历程也颇耐人…

Maven uber-jar(带依赖的打包插件) spring-boot-maven-plugin

文章目录 最基础的 spring-boot-maven-plugin 使用指定入口类安装部署原始 Jar 包到仓库保持原始Jar包名称,为 spring-boot-maven-plugin 生成的Jar包添加名称后缀打包时排除依赖建议将生成的Jar解压后了解一下整体结构与其他常用打包插件比较 本文是对 spring-boot…

04 【计算属性 侦听属性】

04 【计算属性 侦听属性】 1.计算属性 1.1插值语法实现 <title>姓名案例_插值语法实现</title><div id"root">姓&#xff1a;<input type"text" v-model"firstName"> <br/>名&#xff1a;<input type"…

Python自动人工智能训练数据增强工具 | DALI介绍(含代码)

Python自动人工智能训练数据增强工具 | DALI介绍(含代码) 文章目录 Python自动人工智能训练数据增强工具 | DALI介绍(含代码)自动数据增强方法DALI 和条件执行使用 DALI 自动增强使用 DALI 的自动增强性能尝试使用 DALI 进行自动增强 深度学习模型需要数百 GB 的数据才能很好地…

回归测试:优先级(Coverage 的适应度函数)

回归测试&#xff1a;优先级 介绍 在确定优先级时&#xff0c;我们的目标是为测试用例找到一个好的顺序。理想情况下&#xff0c;我们希望尽早发生任何故障。这可以加快整体开发过程&#xff0c;例如&#xff1a; 有时&#xff0c;一旦发现失败&#xff0c;我们就会停止测试。…

HashMap详细讲解-面试题大全

HashMap底层数据结构是什么&#xff1f;1.7和1.8有何不同 1.7是 数组 链表&#xff0c;1.8 是数组 &#xff08;链表 或者 红黑树&#xff09; 当链表的元素比较多的时候&#xff0c;链表就会转换成红黑树&#xff0c;红黑树的元素减少了&#xff0c;红黑树也会转换成链表 为…

前后分离的优势

1.可以实现真正的前后端解耦&#xff0c;前端服务器使用nginx。 前端/WEB服务器放的是css&#xff0c;js&#xff0c;图片等等一系列静态资源&#xff08;甚至你还可以css&#xff0c;js&#xff0c;图片等资源放到特定的文件服务器&#xff0c;例如阿里云的oss&#xff0c;并使…

【计算机网络】前后端分离,HTTP协议,网络分层结构,TCP,强缓存/协商缓存

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 前后端分类HTTP协议HTTP组成HTTP的版本HTTP的请求方式HTTP请求头HTTP响应头强缓存和协商缓存 HT…

Linux ls -l输出文件信息详解

在linux中&#xff0c;我们知道一切皆为文件&#xff0c;经常我们会使用ls -l去查看文件的信息&#xff0c;今天会大家详细讲解一下ls -l输出的文件属性信息。 1.ls -l输出 命令&#xff1a; ls -l 通过ls -l命令输出&#xff0c;我们可以看到上图中的属性信息输出&#xff…