以太坊虚拟机(EVM)是一种基于栈的、准图灵完备(quasi-Turing complete)的虚拟机。EVM是智能合约的执行时环境,它是完全孤立的沙盒:运行在EVM中的代码无法访问网络、文件系统或其他进程。

evm的交易可以看作是从一个帐户发送到另一个帐户的消息。它能包含一个二进制数据(合约payload)和以太币。

如果目标账户含有代码,此代码会被执行,并以 payload 作为入参。

如果目标账户是零账户(账户地址为 0 ),此交易将创建一个 新合约 。 如前文所述,合约的地址不是零地址,而是通过合约创建者的地址和从该地址发出过的交易数量计算得到的(所谓的“nonce”)。 这个用来创建合约的交易的 payload 会被转换为 EVM 字节码并执行。执行的输出将作为合约代码被永久存储。这意味着,为创建一个合约,你不需要发送实际的合约代码,而是发送能够产生合约代码的代码

Solidity这样的高级语言是无法在EVM中被直接执行的,代码会被编译成更加接近机器的低级语言—操作码(opcode)来执行。我们的目的,就是把操作码尽可能地还原成高级语言,以分析其逻辑。

EVM与操作码(Opcode)

EVM是基于栈的虚拟机,为了方便计算,EVM定义了以32个字节为一个词(word)进行操作,栈中最多存储1024个词。

function add(uint a, uint b) {uint sum = a+b;
}

EVM 操作码(Opcode)与 字节码(Bytecode)相关推荐

  1. python的字节码(ByteCode)

    0. 参考资料 参考资料如下: B站: [python]字节码和虚拟机?python代码竟然是这么执行的! python的编译字节码流程: PEP 3147 – PYC Repository Dire ...

  2. EVM底层探索:字节码级分析最小化代理标准EIP1167

    概述 前往我的博客获得更好地阅读体验. 本文主要介绍最小化代理合约EIP1167的相关内容.为了实现最小化,EIP1167使用了bytecode(字节码)作为主要编码方式,即直接使EVM汇编指令进行编 ...

  3. python字节码执行函数_做一个字节码追踪器,从内部理解 Python 的执行过程

    最近我在研究 Python 的执行模型.我对 Python 内部的东西挺好奇,比如:类似 YIELDVALUE 和 YIELDFROM 此类操作码的实现:列表表达式.生成器表达式以及一些有趣的Pyth ...

  4. Python源码学习笔记:Python程序执行过程与字节码

    Python程序执行过程与字节码 注:本篇是根据教程学习记录的笔记,部分内容与教程是相同的,因为转载需要填链接,但是没有,所以填的原创,如果侵权会直接删除. 问题: 我们每天都要编写一些Python程 ...

  5. 深入理解JVM字节码(二)

    目录 字节码基础 一.字节码概述 二.Java虚拟机栈和栈帧 栈帧 1. 局部变量表 2. 操作数栈 三.字节码指令 1. 加载和存储指令 2. 操作数栈指令 3. 对象相关的字节码指令 1. ``方 ...

  6. class 类文件结构与字节码指令

    JVM执行子系统 一.Class 类文件结构 1.Java跨平台的基础 各种不同平台的虚拟机与所有平台都统一使用的程序存储格式--字节码(ByteCode)是构成平台无关性的基石,也是语言无关性的基础 ...

  7. 初探Python字节码和dis模块

    本文主要介绍 Python 字节码.Python 虚拟机内幕以及 dis 模块的简单应用.阅读本文预计 10 min. 初探Python字节码和dis模块 1. 前言 2. Python 字节码 2. ...

  8. 机器码、字节码、汇编语言的区别

    机器码 机器码(machine code),机器语言指令,一种CPU的可读指令,是CPU可直接解读的0 1二进制序列.不同的CPU生产厂商,遵守的机器指令标准主体上是通用的,但也会有自己的一些比较特殊 ...

  9. Python字节码介绍

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

  10. 深入理解JVM虚拟机(五):字节码指令简介

    Java 虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码)以及跟随其后的零至多个代表此操作所需参数(操作数)而构成.由于 Java 虚拟机采用面向操作数栈而不是寄存器的架构,所 ...

最新文章

  1. gpio引脚介绍 树莓派3b_如何让LabVIEW程序运行在树莓派3B(此处有坑)
  2. 全球十大AI领军人物
  3. 产品经理八大惹怒程序员而被砍杀的行为
  4. mysql dump gtid_mysqldump导出数据备份 --set-gtid-purged=OFF
  5. 浅学JavaScript
  6. 混合使用Azure LB和ILB访问相同web服务(3)
  7. inline用法详解
  8. Eclipse的maven插件最新地址
  9. 知识点总结vector创建二维数组
  10. android 文件上传,中文utf-8编码
  11. dhtmlxGantt standard vs dhtmlxGantt pro
  12. Fuji-ImageJ分割中央凹无血管区
  13. 【爬虫实战】自制属于你自己的在线翻译程序 - 爬取 360 在线翻译(教学 + 实践)
  14. 树莓派安装开源智能家居系统 Domoticz
  15. 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
  16. 软件从业者不可不读的一本书
  17. VR和AR可以怎样干掉智能手机
  18. js 获取json数组里面数组的长度实例
  19. 如何提高google pr值
  20. 电商项目秒杀设计思路

热门文章

  1. MySQL添加约束条件
  2. 前程无忧助力,再次举办湖北武汉网络专场招聘会
  3. JVM00_面试官对类加载器子系统、运行时数据区、内存分布、执行引擎的灵虚拷问,你能坚持到第几问?
  4. 汉诺塔III 汉诺塔IV 汉诺塔V
  5. GB 18030介绍及其与相关标准的比较-GBK与GB18030-2000
  6. SVN使用教程:一:安装及使用
  7. 安卓 高德SDK 将当前坐标居地图中心
  8. 电子商务系统建设(十一)
  9. 电子商务安全体系架构
  10. Matlab(三)——图像处理实例:去除背景,提取指纹