rbpf虚拟机-打包和代码执行

简介: 该篇文章是记录rbpf虚拟机执行文件打包和执行的过程。(学习该虚拟机的目的是为了搞懂solana合约的执行方式,solana使用的rbpf是在该虚拟机上进行扩展)。

✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨
—— 专为开发者打造的宝藏基地,等你来探索!
这里有:


🔥 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
🎉 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
💎 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!


🚀 立即访问 → 盹猫猫的个人小站 ← 点击探索
🌟 说不定这里就有你寻找已久的技术秘籍哦~

Welcome to Code Block's blog

本篇文章主要介绍了
[rbpf虚拟机-打包和代码执行]
❤博主广交技术好友,喜欢我的文章的可以关注一下❤

一、概述

该篇文章是记录rbpf虚拟机执行文件打包和执行的过程。

(学习该虚拟机的目的是为了搞懂solana合约的执行方式,solana使用的rbpf是在该虚拟机上进行扩展。)


二、依赖安装

2.1 clang安装

因为要对c代码进行编译,所以需要安装clang,它可以比较好的支持将c代码打包为.o文件,当然你也可以使用用其它语言的并配合不同的打包程序进行打包,这边使用c语言.对于不同的linux有不同的安装方法:

Centos安装

yum install clang

Deebin安装

apt install clang

安装完成后可以使用以下命令检查是否安装成功:

clang -v

2.2 安装linux-headers头文件

eBPF 程序通常需要与内核进行交互,因此需要使用内核提供的 BPF 接口和相关数据结构。这些接口和数据结构定义在内核头文件中。所以这里需要安装头文件,使用以下命令进行安装:

Centos安装

yum install kernel-headers
yum install kernel-devel

Deebin安装

apt install linux-headers

三、bpf打包

在打包时确保已经安装了上述的依赖文件,并使用以下命令进行打包:

clang -target bpf -c load_elf__block_a_port.c -o load_elf__block_a_port.o

-target:打包的目标文件为bpf文件。
-c: 要打包的c代码目标
-o:打包后的文件名称。

运行后会在当前目录中生成load_elf__block_a_port.o 文件。若要查看其机器码可以使用以下命令查看其反汇编码:

llvm-objdump -d  load_elf__block_a_port.o

这里需要用到llvm,使用以下命令安装:

yum install llvm

四、执行代码

4.1 文件加载

    let filename = "examples/load_elf__block_a_port.o";
    //获取文件路径
    let path = PathBuf::from(filename);
    println!("----------------------------------------------");
    println!("path:{:?}", path);
    //以elf文件的格式读取
    let file = match elf::File::open_path(path) {
     
        Ok(f) => f,
        Err(e) => panic!("Error: {:?}", e),
    };
    println!("file:{:?}", file);
    println!("----------------------------------------------");
    //具体的方法块
    let text_scn = match file.get_section(".classifier") {
     
        Some(s) => s,
        None => panic!("Failed to look up .classifier section"),
    };
    println!("text_scn:{:?}", text_scn);
    let prog = &text_scn.data;
    println!("----------------------------------------------");

rbpf虚拟机执行的是字节码,所以这里需要对文件进行读取,使用elf库可以将.o类型的bpf文件读取为json,上述代码中的file即为json格式。在未编译的c文件中,使用SEC进行标识section方法。

相关文档:elf文档

SEC(".classifier")
int handle_ingress(struct __sk_buff *skb)

所以上面通过file.get_section(".classifiler")可以获取这个具体执行的方法。通过.data获取方法的字节码。

4.2 运行

有了字节码数据,就可以通过vm.execute_program方法对字节码程序进行执行。
具体执行可参考:rbpf虚拟机-JIT和解释执行


五、总结

因为solana合约执行的虚拟机是建立在rbpf虚拟机之上的,通过对rbpf虚拟机打包和代码执行,可以想到,solana的使用rust打包完成和部署的so文件,其本质和原理类似对.o文件的打包。其代码的执行原理,也类似于对字节码数据的执行。

代码来源:rbpf虚拟机
鸣谢: qmonnet 提供的开源代码.

当然,我也会将带有中文注释和自己理解的一些代码上传的我的github页面,感兴趣的朋友可以进行clone查看.

我的GitHub:forked

目录
相关文章
|
区块链 数据安全/隐私保护 缓存
带你读《深入理解以太坊》之三:技术架构
这是一本从原理和实践两个层面系统、深入讲解以太坊技术的专著,从设计理念、技术架构、共识算法、智能合约、以太坊虚拟机、开发工具、DApp开发、企业以太坊解决方案、跨链技术等近10个方面进行了详细讲解,既适合初学者系统学习以太坊的原理和应用开发,又适合有一定基础的开发者深入掌握以太坊的底层运行机制。
|
新零售 人工智能
阿里巴巴联合汉仪重磅推出五款人工智能字体:汉仪天真体、英雄体等
众所周知传统做字的人力成本非常之高,如果全靠人类设计师来完成,一套标准字库从设计到完成需要一年多的时间。
13929 0
网站备案工信部短信核验操作流程
阿里云网站备案工信部短信核验操作流程,网站备案通过阿里云初审后后提交到管局,需要进行工信部短信核验
1986 0
网站备案工信部短信核验操作流程
|
3月前
|
存储 缓存 自然语言处理
从一次修复到长期记忆:Agent 工作流里的知识沉淀
Thinkroom 提出“知识复用”替代传统“代码复用”,将每次问题解决沉淀为结构化、机器可读的 `Learning`(Markdown 文档),嵌入研发全流程:调试后自动捕获、规划前智能检索、编码时强制遵循、审查中实时校验。知识按持久性分级存储,辅以防腐机制与毫秒级 Grep-First 检索,让历史经验真正驱动下一次开发——知识不再沉睡于 Wiki,而活在工作流中。
290 0
|
3月前
|
网络协议 API 数据安全/隐私保护
阿里云百炼按量付费 API Key 获取教程:附TokenPlan和Coding Plan密钥获取方法
本文详解阿里云百炼按量付费API Key获取流程:登录控制台→开通服务→进入API Key管理页→选择地域(推荐北京)→创建并配置权限(全部或自定义IP/模型白名单)→立即复制保存sk-开头密钥(仅显示一次)。Token/Coding Plan用户需用专属sk-sp-密钥。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
4月前
|
监控 Java Nacos
微服务流量治理实战: Sentinel 和 MSE的熔断降级艺术
Sentinel 是阿里巴巴开源的流量治理组件,在微服务高并发场景中承担限流、熔断、降级三大核心职责。阿里云 MSE 提供了 Sentinel 的托管规则推送和集群限流增强。本文从电商秒杀场景出发,实战演示 Sentinel 核心功能:QPS 限流、线程池隔离、熔断降级、热点参数限流、系统自适应保护,以及 Nacos 规则持久化和 MSE 托管方案,并给出生产环境的最佳实践。
|
4月前
|
存储 数据采集 机器人
具身智能爆发背后,存储如何成为关键基础设施?
具身智能爆发式发展带来存储新挑战:多模态数据采集、仿真生成、清洗标注、分布式训练与低延迟推理各环节诉求迥异。阿里云以 OSS 统一底座(支持 QoS 管控、冷热分层、Vector Bucket 向量检索)+ CPFS 高性能训练引擎协同,构建全链路、高弹性、低成本存储方案。
750 0
具身智能爆发背后,存储如何成为关键基础设施?
|
4月前
|
机器学习/深度学习 人工智能 弹性计算
通过阿里云服务器部署AI agent怎么选?OpenClaw与Hermes区别及选择建议参考
本文对比了两款可通过阿里云轻量应用服务器一键部署的AI Agent平台——OpenClaw与Hermes。OpenClaw定位为"日常事务万能工具箱",全面支持飞书、钉钉、企业微信等国内IM集成,适合办公自动化与团队协作,部署极简;Hermes则是"会自我进化的数字合伙人",擅长复杂任务拆解与深度研究,随使用持续学习优化,但不支持国内IM。选型建议:日常办公选OpenClaw,复杂研究选Hermes。当前阿里云轻量服务器2核2G低至38元/年、2核4G仅9.9元/月,新用户可享限时特惠,最低成本即可拥有专属AI助手。
|
Windows
AutoIt介绍
AutoIt的下载网址: https://www.autoitscript.com/site/autoit/downloads/ AutoIt在线文档:http://www.
2416 0
|
前端开发
【Ant Design Pro】使用ant design pro做为你的开发模板(八)开发第一个完整的后台页面
【Ant Design Pro】使用ant design pro做为你的开发模板(八)开发第一个完整的后台页面
1387 0
【Ant Design Pro】使用ant design pro做为你的开发模板(八)开发第一个完整的后台页面