如何在内核程序(内核上下文)中访问用户程序创建的bpf映射?

2024-02-16

假设有两个程序(用户程序和内核程序)。

用户程序通过api制作bpf图bpf_create_map_name() 返回 fd。有了这个 fd,我可以通过系统调用访问地图(例如,bpf_map_update(FD,..))。但我只能在用户空间程序中执行此操作,因为 fd 仅对用户程序(=用户进程)有效,然后如何在 bpf 程序(位于内核空间)中访问该映射?

我听说我可以通过 libbpf 将地图固定在 fs 中bpf_obj_pin(fd,文件路径)并且可以通过 libbpf 获取此映射bpf_obj_get(文件路径)但问题是bpf_obj_get仅在用户空间中可用,因为这是系统调用。

之前看过类似的讨论(从内核空间访问 BPF 映射 https://stackoverflow.com/questions/70707891/accessing-bpf-maps-from-kernel-space)。但这对我来说并不清楚。通过以下方式访问 bpf 地图bpf_map_lookup_elem(fd, ..) 在内核空间,我必须提前知道map的fd。但正如我之前提到的,map 的 fd 在内核中无效。

我使用的是 libbpf 而不是 BCC。


你可能应该看看 libbpf 的函数bpf_map__reuse_fd() https://elixir.bootlin.com/linux/v5.17/source/tools/lib/bpf/libbpf.c,它允许重用指向 BPF 程序的现有映射的文件描述符。

这是使用此函数的示例 https://elixir.bootlin.com/linux/v5.17/source/tools/testing/selftests/bpf/prog_tests/pinning.c#L253:我们首先检索一个指向要替换的地图的指针struct bpf_object通过致电bpf_object__find_map_by_name(),然后告诉它重用现有的 fd。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在内核程序(内核上下文)中访问用户程序创建的bpf映射? 的相关文章

  • 仅捕获 arp-reply 数据包的 BPF 表达式

    有没有BPF http biot com capstats bpf html只捕获 arp reply 数据包的表达式 目前 我正在使用 Pcap4J 和以下 BPF 表达式 arp 和 dst 主机host和乙醚 dstmac where
  • Linux 内核 - 我可以在不同的函数中锁定和解锁 Spinlock 吗?

    我是内核编程和锁编程的新手 在不同的函数中锁定和解锁自旋锁是否安全 我这样做是为了同步代码流 另外 在 schedule 中使用自旋锁 锁定和解锁 是否安全 让调度程序等待获取锁是否安全 提前致谢 代替spinlock 你可以使用semap
  • ebpf - 根据内核版本使用ringbuf和perfbuf

    我正在使用 ebpf 来捕获进程创建 我对内核 5 8 及更高版本使用ringbuf 并希望在同一 ebpf 内核文件中对旧内核使用 perfbuf 有一个关于它的很棒的博客https nakryiko com posts bpf core
  • 如何制作内核模块二进制 blob

    我想为各种发行版分发专有的 Linux 模块 而不需要为所有发行版预先构建模块 例如我有以下文件 wrapp c mod c fops c 所有wrapp c都是我正在使用的所有内核函数的包装器 unsigned int wrap iore
  • 如何以编程方式动态管理 iptables 规则?

    我需要查询现有规则 以及能够轻松添加和删除规则 我还没有找到任何 API 来执行此操作 我缺少什么吗 我最接近的解决方案是使用iptables save iptables xml用于查询并手动调用 iptables 命令本身来添加 删除规则
  • 如何测量 Linux 中的真实 CPU 使用率?

    我知道有类似的工具top and ps用于测量 CPU 使用率 但他们测量 CPU 使用率的方法是测量空闲任务未运行的时间 因此 例如 即使 CPU 由于缓存未命中而出现停顿 这些工具仍然会认为 CPU 被占用 然而 我想要的是分析工具在停
  • 在具有 4.14 内核的 IMX6 上使用 vivante GPU

    我正在使用 yocto rocko Linux 4 14 24 开发 IMX6QP 并尝试使用 GPU 我的 yocto 配置文件 MACHINE imx6qp tx6 emmc DL DIR BSPDIR downloads SSTATE
  • 在 anaconda 中更新 Spyder 后出现内核错误 [重复]

    这个问题在这里已经有答案了 我将 Spyder 更新到版本 4 1 0 以及 anaconda 中的所有其他软件包 Spyder 本身工作正常 但内核无法工作 我收到以下错误 但不知道如何解决它 An error ocurred while
  • Docker windows 加载内核模块

    我正在 Windows 上运行 Docker 在 MacOSX 上可以观察到下面描述的类似效果 我有一个 Docker 容器 其中有一个程序尝试访问 squashfs 映像 要访问squashfs 内核必须静态地遵守loopdevice支持
  • //什么是路径,它与/有什么不同

    我们知道根目录是 根据posix 还有另一个与 不同的目录 当您 ls 和 ls 时 输出是相同的 就像 stat 一样 但是如果您 cd 和 cd 它们是不同的 尽管目录内容相同 这真的让我很困惑 有人得到答案吗 From Bash FA
  • 破坏用户空间是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这可能是一个简单的问题 但是 我听说在内核上工作的唯一规则是不要破坏 用户空间 所以我想知道这意味着什么 打破用户空间这是怎么发生的 Ed
  • Android内核编译错误gcc6 linaro 6

    我正在尝试使用 Linaro 6 进行编译 但收到此错误 我认为该错误与 GCC 6 有关 我对编译内核或编码非常业余 但即使搜索类似的术语我也无法弄清楚 CC drivers iommu msm iommu v1 o In file in
  • 来自task_struct的完整进程名称

    我想从中获取完整的进程名称struct task struct The comm字段仅存储 16 个字符 而进程名称可以更长 有没有办法获得完整的进程名称 这可以通过获取来完成struct vm area struct from task
  • USBInterfaceOpen总是报kIOReturnExclusiveAccess错误

    最近我遇到了这个问题 很头疼 我已经在这个问题上花了一个星期了 但仍然失败 希望您能帮我把这块石头踢开 非常感谢 我的问题 我们公司为iPhone生产USB存储设备 实际上这个存储设备中有一个SDCard 现在 我们想要开发一个 Mac 应
  • 内核如何区分线程和进程

    Linux 中的线程被称为轻量级进程 无论是进程还是线程 它们的实现都是通过task struct数据结构 1 gt 那么 从这个意义上说 内核如何区分线程和进程 2 gt 当发生上下文切换时 线程如何在上下文切换中获得更少的开销 因为在此
  • 尝试映射大页面 (1GB) 时 mmap 失败

    我做了什么 使用 root 启用大页 我的系统支持 1MB 大页 echo 20 gt proc sys vm nr hugepages 将大页文件系统挂载到 mnt hugepages mount t hugetlbfs nodev mn
  • Windows 内存映射文件

    我正在尝试研究 Windows 内核在内存映射文件 虚拟内存方面的行为 具体来说 我感兴趣的是确定内存映射文件的内容 由 Windows 刷新到磁盘的频率以及 Windows 使用什么标准来决定是时候这样做 我在网上做了一些研究 除了 MS
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并
  • 设置 IRQ 映射

    我正在遵循一些教程和参考文献来尝试设置我的内核 我在教程中遇到了一些不熟悉的代码 但根本没有解释它 这是我被告知映射的代码16 IRQs 0 15 到 ISR 地点32 47 void irq remap void outportb 0x2
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo

随机推荐

  • 在 Windows 上使用 FreeType 和 Qt5

    有谁知道是否可以使用 FreeType 构建 Qt5 作为 Windows 上的文本渲染器而不是本机渲染器 我尝试使用 qt freetype 编译 Qt5 但仍然得到错误的文本 我还需要做其他事情吗 在查看 DeadWarlock 提出的
  • 检查数据类字段是否有默认值的 Pythonic 方法

    我最近一直在使用 python 3 7 并正在寻找利用新数据类的方法 基本上我有一个方法可以迭代数据类字段并检查它们是否有默认值 from dataclasses import fields MISSING classmethod def
  • pm2 下的自定义日志记录

    我在我写入的节点应用程序中有一些有用的日志记录console log node server js gt gt var log nodeserver log 2 gt 1 但是 当在下面尝试相同的操作时pm2 pm2 start serve
  • python如何在赋值运算符之后赋值[重复]

    这个问题在这里已经有答案了 好吧 我确信这是一个非常愚蠢的问题 但是python如何给变量赋值呢 说有一个变量a并被赋值a 2 所以python为变量分配了一个内存位置并且a现在指向包含该值的内存位置2 现在 如果我分配一个变量b a变量b
  • 以编程方式编辑表单回复

    我有一个谷歌脚本 可以为转储到我的电子表格中的每个表单响应生成编辑网址 有没有办法以编程方式更改响应值 就像我实际打开 URL 并手动更改值一样 例如 假设某人提交了一份姓名字段为 Sam 的表单 我希望能够以编程方式编辑此响应 以便同一字
  • 设备锁定时在 Today 扩展中加载文件

    在我今天的设备解锁的扩展中 这行代码按预期工作 从图像路径返回数据 let imageData NSData contentsOfFile path 但是 当我的设备用密码锁定时 它返回零 当设备锁定时 有什么方法可以访问文件系统中的图像吗
  • 全局设置环境变量而无需重新启动Ubuntu

    我知道可以通过添加条目来设置系统范围的环境变量 etc environment or etc profile 但这需要系统重新启动或 X 重新启动 是否可以在 Ubuntu Linux 中设置环境变量 以便在系统范围内立即可用 而无需重新启
  • 使用 for 循环进行多个公司和多个日期的事件研究

    我正在进行一项事件研究evReturn函数从erer包裹 目的是获得每个公司的超常收益以及所有公司的平均超额收益 我无法获得平均回报 因为该函数对每个公司执行单独的执行 但不会同时对所有公司执行一次 尽管这可以通过 for 循环实现 我似乎
  • 屏幕方向更改时非法状态异常未创建视图

    我一直在尝试制作一个从活动 GradeListActivity 打开列表视图片段 GradeListFragment 的应用程序 当我单击某个项目时 它会打开一个新片段 GradeDetailFragment 如果处于纵向模式 它将替换fr
  • Lazarus:如何列出系统上所有可用的网络连接?

    我正在使用 Lazarus IDE 在 Linux 系统上编写程序 该程序应该连接到 Internet 或 Intranet 所以 我想向用户显示他们可以用来连接到互联网或内部网 如wifi 的所有可用网络连接的列表 如果系统上有两个活动网
  • LinkLabel... 在默认网络浏览器中打开?

    是否可以开一个LinkLabel在默认计算机网络浏览器中 是的 你可以使用System Diagnostics Process Start url 在 链接被点击 事件中
  • HTTP 状态 403 - 对所请求资源的访问已被拒绝(CSS 被阻止?)

    我一直在努力保护我的项目 我有一个使用 LDAP 服务器进行身份验证的登录页面 如果不正确 它会显示一个错误页面等 我现在刚刚添加
  • 为什么 pip 需要在 iPython 中使用感叹号?

    只是一个简单的例子 输入pip list不起作用但是 pip list做 是否有一些关于感叹号和在 ipython shell 中使用模块的语法 这实际上并不特定于pip 但实际上是来自 iPython 笔记本的任何 shell 命令 您会
  • 如何在android中的sqlite数据库中存储带有列表的自定义对象

    如何为包含这样的列表的自定义对象创建表 public class Mobel implements Parcelable int thumbnail List
  • 修复 SwiftUI 中自定义字体的行距

    我正在使用自定义字体 双体船 https fonts google com specimen Catamaran 并且看起来行与行之间有很大的空间 例如我有这样的代码 Text Example text that has big space
  • 保存单个核心数据实体(而不是整个上下文),同时保留 NSFetchedResultsController 功能

    唷 抱歉标题太长了 我有一个托管对象上下文 其中存储来自两个不同位置的歌曲 我从手机上的持久存储中获取一些歌曲 使用 Core Data 并从在线数据库中提取一些歌曲 这两首歌曲都属于同一 ManagedObject 子类 我希望这两首歌都
  • 迁移 COBOL 代码

    我的任务是将 COBOL 代码转换为 NET 有可用的转换器吗 我正在尝试高层次地理解 COBOL 代码 我无法理解 COBOL 代码 有没有流程图生成器 我很感激任何帮助 谢谢 将软件系统从一种语言或操作环境迁移到另一种语言或操作环境始终
  • 如何在Fauxton中使用reduce

    我一直在关注一些 Couch 培训 但无法弄清楚如何在 Fauxton 中使用reduce 选择地图区域下方的 count 本身不会执行任何操作 我尝试将其添加到地图代码下方 但我想我需要以某种方式集成它 在我的示例中 我试图计算每个标签在
  • git create stash 无需配置 user.email 和 user.name (git stash --author ?)

    IN SHORT 是否有可能创建一个存储 使用git stash create without需要配置user email and user name 类似的东西git commit author选项 一些背景 我有几台构建机器 上面有一个
  • 如何在内核程序(内核上下文)中访问用户程序创建的bpf映射?

    假设有两个程序 用户程序和内核程序 用户程序通过api制作bpf图bpf create map name 返回 fd 有了这个 fd 我可以通过系统调用访问地图 例如 bpf map update FD 但我只能在用户空间程序中执行此操作