首页
学习
活动
专区
圈层
工具
发布

rbpf虚拟机-opcode码

一、概述 该篇文章是rbpf虚拟机opcode码作用和使用的整理。 (学习该虚拟机的目的是为了搞懂solana合约的执行方式,solana使用的rbpf是在该虚拟机上进行扩展。)...经过验证器后在rbpf虚拟机需要知道每条指令是用来做什么的,就需要用到opcode码,opcode码中由8种操作码、5种访问模式、4种数据大小进行组合获得,其结构如下图: 7 6 5 4...操作码(OP,7~4位)4位 Opcode 值 名称 说明 0x00 BPF_LD 立即数/内存加载指令 0x40 BPF_LDX 从内存加载到寄存器 0x60 BPF_ST 存储指令(寄存器 → 内存...这样,哪怕不知道是什么值,也可以通过按位或计算得到 opcode(操作码)....码结构进行解读,对opcode码有了更深刻的理解,同时这种结构组合按位或处理可以产生很多组合结果,该方法可以很好的运用到日常的其它语言项目中。

14300
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    以太坊智能合约OPCODE逆向之理论基础篇

    因此我开始尝试研究并开发能满足我们自己需求的反编译工具,在我看来如果要写出一个优秀的反汇编工具,首先需要有较强的OPCODE逆向能力,本篇Paper将对以太坊智能合约OPCODE的数据结构进行一次深入分析...基础 智能合约的OPCODE是在EVM(Ethereum Virtual Machine)中进行解释执行,OPCODE为1字节,从0x00 - 0xff代表了相对应的指令,但实际有用的指令并没有0xff...个,还有一部分未被使用,以便将来的扩展 具体指令可参考Github3上的OPCODE指令集,每个指令具体含义可以参考相关文档4 IO 在EVM中不存在寄存器,也没有网络IO相关的指令,只存在对栈(stack...),内存(mem), 存储(storage)的读写操作 stack 使用的push和pop对栈进行存取操作,push后面会带上存入栈数据的长度,最小为1字节,最大为32字节,所以OPCODE从0x60-...在对智能合约的OPCODE有了一定的了解后,后续准备先写一个EVM的调试器,虽然Remix已经有了一个非常优秀的调试器了,但是却需要有Solidity源代码,这无法满足我测试无源码的OPCODE的工作需求

    1.8K30

    动手实践,Linux安装php-vld全过程实录

    第二问 紧接着,又会有第二问:opcode是什么? 答:当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。...但是既然opcode cache能带来CPU和内存开销的降低,这总归是好事。   第三问 最后,直击灵魂的第三问:为什么要使用Opcode?...Zend引擎必须从文件系统读取文件、扫描其词典和表达式、解析文件、创建要执行的计算机代码(称为Opcode),最后执行Opcode。...每一次请求PHP脚本都会执行一遍以上步骤,如果PHP源代码没有变化,那么Opcode也不会变化,显然没有必要每次都重行生成Opcode,结合在Web中无所不在的缓存机制,我们可以把Opcode缓存下来,...以后直接访问缓存的Opcode岂不是更快,启用Opcode缓存之后的流程图如下所示: ?

    1.2K20
    领券