rbpf虚拟机-阶段整理
【摘要】 该文章是对近期关于rbpf虚拟机文章的整理和回顾。其中包括了验证器、汇编器和反汇编器、op码、即时编译器(JIT)、执行速度测试、打包和代码执行、不同码关系、Call指令相关文章。我认为这些是rbpf虚拟机中比较重要的概念以及技术。
✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨
—— 专为开发者打造的宝藏基地,等你来探索!
这里有:
🔥 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
🎉 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
💎 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!
🚀 立即访问 → [盹猫猫的个人小站] ← 点击探索
🌟 说不定这里就有你寻找已久的技术秘籍哦~
@[toc]
Welcome to Code Block's blog本篇文章主要介绍了
[rbpf虚拟机-阶段整理]
❤博主广交技术好友,喜欢我的文章的可以关注一下❤
一、概述
该文章是对近期关于rbpf虚拟机文章的整理和回顾。
其中包括了验证器、汇编器和反汇编器、op码、即时编译器(JIT)、执行速度测试、打包和代码执行、不同码关系、Call指令相关文章。我认为这些是rbpf虚拟机中比较重要的概念以及技术。
(学习该虚拟机的目的是为了搞懂solana合约的执行方式,solana使用的rbpf是在该虚拟机上进行扩展。)
二、文章链接
- [验证器]
- [汇编器和反汇编器]
- [即时编译器]
- [码]
- [op码]
- [call指令]
- [打包和代码执行]
- [JIT和解释执行对比]
三、功能和关键点
- 验证器:验证器提供了包括一系列对字节码程序的检查。包括:
check_prog_len
- 程序长度检查
check_load_dw
- LD_DW指令检查
check_jmp_offset
- 跳转指令检查
check_registers
- 寄存器访问检查 - 汇编器和反汇编器:
- 汇编器通过汇编指令进行字符分根,并通过循环的方式将其转换为而进行字节码数据。使用到了
combine
库进行分割和转换。 - 反汇编器通过循环从map中获取与字节对应的字符串指令的方式,将其转换为汇编码格式。
- 即时编译器:即时编译器通过x86-64调用标准完成字节码到机器码的转换。
- 码:通过对字节码、汇编码、机器码的区别,在调用时的分层。
- 汇编码是语言
- 字节码是编译后的中间环节
- 机器码则属于执行环节
- op码: 也叫opcode,是区分不同指令之间作用的关键字,其对应在汇编码中为"mov"等前缀。
- call指令:call指令为调用辅助函数时必要的指令,需要执行程序前进行注册,本质上为map存储的<key,value>值。
- 打包和代码执行: 对clang进行部署和打包,以及打包文件的反编译,可以清晰的看到打包文件的字节码。对代码的执行实际为对字节码程序的执行,其中用到了
elf
库。 - JIT和解释执行对比: 对JIT和解释执行进行速度对比,对JIT执行的执行速度有了更直观的印象,发现JIT在使用CALL调用辅助函数时,几乎不会产生任何加速。
四、总结
这就是对rbpf虚拟机内容的阶段整理,方便大家查阅,自己也学习到了很多东西。如果您在文章中发现任何逻辑或理解错误,请在评论中留下您宝贵的意见。
代码来源:rbpf虚拟机
鸣谢: qmonnet 提供的开源代码.
当然,我也会将带有中文注释和自己理解的一些代码上传的我的github页面,感兴趣的朋友可以进行clone查看.
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)