Solidity原理(六):用solc编译smart contract,用evm反编译bytecode

【区块链】EVM反编译软件Porosity的使用-mac EVM反编译软件Porosity的使用-mac首先给出 porosity 的 GitHub 地址: here本文也是根据这个网址进行学习。1. 创建和约可以使用自己写的合约,也可以在etherscan 上面找一些合约, 给出例子如下://vulnerable.sol pragma solidity ^0.4.4; contract SendBalance { mapping ( address 阅读详情

首先需要安装solc和evm

solc: https://github.com/ethereum/solidity/releases

evm:   https://geth.ethereum.org/downloads/

编译一个smart contract可以通过指令 solc --bin-runtime filepath来得到bytecode

反汇编bytecode可以通过evm --disasm bytecodeFilePath

反汇编以后的文件如下:

前面的数字就是pc(programmer counter), 以20行的指令为例,0x008d代表21行的JUMPI跳转的pc值是141. 

solc还有下面几个非常好用的指令,可以获得合约的ast,asm(汇编码),opcode,bin,abi,函数签名等

EVM:以太坊虚拟机(EVM)字节码反编译器 EVM字节码反编译器 解释器和反编译器,以及用于从字节码中以编程方式提取信息的其他几种工具。 用法 npm我evm 产品特点 将字节码转换为操作码 从字节码或TX数据中读取事件或函数之类的信息 从字节码中提取(如果有) API 方法 getBytecode() -获取原始字节码(不是真正有用;与输入相同) getOpcodes() -返回包括pc和pushData的操作码(如果包含) getFunctions() -使用字节码从函数签名中解析函数 getEvents() -从事件签名中以字节码解析事件 getJumpDestinations() -从JUMPDEST操作码获取程序计数器数 立即下载

相关推荐

evm-disassembler:EVM字节码转操作码反汇编程序

EVM字节码转操作码反汇编程序 快速运行: $ echo "0x600035601c52" | python3.6 byte2op.py [0] PUSH1 0:0x00 [2] CALLDATALOAD [3] PUSH1 28:0x1c [5] MSTORE

智能合约反编译查错经验汇编

问题:为什么需要比较不同版本的solc编译器 EVM在不断升级中,有些指令是后来加入的,比如revert,还有returndatasize 同样的solidity代码,鹏飞在0.4.22编译出来后,就在未升级过的北京银行项目环境上运行报错,因为没有returndatasize这个指令(推测是同样的函数,后面的编译器版本动作不一样了,比如要先返回到buffer了,间接返回returndatasi...

郑泽洲的博客 2152

ethereum-dasm:以太坊evm字节码反汇编程序和静态动态分析工具

以太坊 带有静态和动态分析以及功能签名查找的以太坊evm字节码反汇编程序 [ ] [ ] 反汇编evm字节码 将合同反编译为伪代码 安装 点子 #> pip3 install "ethereum-dasm[mythril,abidecoder]" #> python3 -m ethereum_dasm --help # verify installation 码 #> pip3 install -r requirements*.txt #> python3 setup.py install #> python3 -m ethereum_dasm -a 0x44919b8026f38d7

EVM Transcompiler

将EVM1字节码反编译成ewasm字节码。EVM字节码作为输入,并返回一个与ewasm兼容的字节码,它可以像普通的ewasm合约一样执行。 然而,当执行它时,必须确保主机函数处理状态中的字节码(如codeCopy和externalCodeCopy)必须始终引用未转换的EVM1字节码。 反编译器被实现为一个合约或一个在特定地址的预编译合约。 ...

The future is already here it's just not evenly distributed。 756

避坑指南:在Ubuntu 22.04上配置UR5e与ROS2 Humble真机通信的完整流程

本文详细介绍了在Ubuntu 22.04上配置UR5e机械臂与ROS2 Humble真机通信的完整流程,包括环境准备、网络配置、URCap安装、ROS2驱动部署及控制器状态验证等关键步骤。特别针对常见问题如网络连接失败、驱动启动错误等提供了实用解决方案,帮助工程师高效完成UR5e与ROS2的集成工作。

weixin_30790841的博客 464

小华半导体HC32芯片开发使用说明

HC32F/L系列MCU在Keil MDK和IAR Workbench环境下通过工程样例进行软件开发。

小布的芯视角 5631

Solidity极简入门#27. ABI编码解码

当你想省空间,并且不与合约交互的时候,可以使用abi.encodePacked,例如算一些数据的hash时。ABI被设计出来跟智能合约交互,他将每个参数填充为32字节的数据,并拼接在一起。abi.decode用于解码abi.encode生成的二进制编码,将它还原成原本的参数。​功能类似,只不过第一个参数为函数选择器,为函数签名Keccak哈希的前4个字节。​,用于解码abi.encode的数据。​对编码进行了压缩,长度比abi.encode短很多。​功能类似,只不过第一个参数为函数签名,比如"​。

sleep的博客 1896

DeepSeek赋能公文写作:从高效成文到精准传情的全维度指南

摘要:AI赋能公文写作的精准化实践 公文写作长期面临框架混乱、素材匮乏、表达不规范、修改低效等痛点。DeepSeek等AI工具通过"精准指令+分步赋能"模式实现突破:首先明确公文的目的性、逻辑性和规范性特征;其次采用包含场景、类型、目的等要素的指令模板;再分四步实施:框架搭建确保层次分明,内容填充解决素材问题,表达优化适配不同语体,合规校验把关格式规范。典型案例显示,AI能将数据罗列转化为"数据+成果+价值"的生动表述,使公文既规范又具感染力。这种AI赋能的写作方法显

通俗易懂学IT 231

solc+evm环境配置

solc+evm环境搭建

qq_43396274的博客 493

DMC-E 系列总线控制卡----雷赛板卡介绍(十七)

低的速度平稳地接近目标位置,降低运动部件对接触点的冲击。设置插补目标位置,插补方向,以确定插补动作。圆形区域限位,即运动仅在用户设定的圆形范围内进行,超出这个范围,运动会依据设定。首先,用户需要绑定两个轴进而确定该功能所处的坐标系。仅支持平面圆形限位,不支持空间圆形限位。径,可以确定该区域在坐标系中的位置。)运动开始前,用户应当将旋转轴调整到与插补曲线的起点位置相切的角度;可以配合椭圆插补或圆弧插补运动,实现跟随轴的旋转运动角度与曲线当前。外,其它运动形式若开始运动时在限位区域外,则禁止运动;

A_nanda的博客 653

STMicroelectronics 系列:STM32G4 系列_(11).STM32G4系列编程基础

通过本文,我们学习了如何在 STM32CubeIDE 中搭建开发环境,创建新项目,配置 GPIO、定时器和 ADC 外设,并编写相应的代码示例。这些基础知识将帮助你快速上手 STM32G4 系列的编程。希望本文对你有所帮助,祝你编程愉快!

2401_87715305的博客 1279

solidity编译出来bytecode不一样的问题分析

问题描述 使用remix 和 solcjs编译出来的bytecode不同(最后32+2字节不同) 源码分析 libsolidity/interface/CompilerStack.cpp void CompilerStack::compileContract( ContractDefinition const& _contract, map<ContractDefinition const*, eth::Assembly const*>& _compiledContract

yqq1997的博客 1232

Qt入门教程【基础控件篇】QLineEdit输入框

QLineEdit输入框

小鱼酱的博客 3262

python调用solc编译智能合约

错误记录,python调用solc编译智能合约(巨坑) 错误信息 Traceback (most recent call last): File “d:/pj/code/compiler.py”, line 38, in getCFG(“auction.sol”) File “d:/pj/code/compiler.py”, line 30, in getCFG bytecodes=getByteCodes(filename) File “d:/pj/code/compiler.py”, line 2

qq_41596539的博客 1324

肖特基二极管选型参数,结构原理,工艺与注意问题总结

肖特基二极管(Schottky Diode)是一种特殊的二极管,也被称为肖特基势垒二极管。它是利用金属与半导体接触形成的金属-半导体结原理制成的。与传统的PN结二极管相比,肖特基二极管具有更低的正向压降、更高的开关速度、更高的反向恢复时间以及更好的温度稳定性等特点。本文对肖特基二极管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 813

MacBook Air老本重装系统

手里的这个本子型号是A1466,cpu i5,4G内存,硬盘ssd 120G。 重装系统可以在原系统上升级到更新版本,或者用U盘安装。 先确定,这个本子可以安装什么系统。 最权威的信息当然是apple的官网,地址:https://support.apple.com/zh-cn/HT211683 在“检查兼容性”中,可以依次检查每个系统兼容的硬件型号。Mojave是A1466能安装的最高版本。 确认兼容性后,下一步就是下载安装文件。还是这个页面稍下面一点可以找到。 这里告诉用户文件可以在什

bigwood99的博客 2万+

Solidity——Bytecode文件结构

SolidityBytecode文件结构 智能合约Demo pragma solidity ^0.4.25; contract Demo{ uint public value1 = 0; uint public value2 = 0; function A(uint a) public returns(uint){ value1 += a; return value1...

Metaverse 1574

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

vscode python solidity solcx 编译问题

solcx.install_solc("0.6.0") 下载这步出现了。需要换成这个 binaries.soliditylang.org。solc-bin.ethereum.org 已经停止维护了。2. 关闭代理后出现以下错误。

Pulaski的博客 842

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【区块链安全 | 第九篇】基于Heimdall设计的智能合约反编译项目

代理合约只是一个转发请求的合约,而实际的业务逻辑由实现合约(Implementation Contract)来执行。它不仅支持普通合约的反编译,还能自动解析代理合约(Proxy Contract),并找到对应的实现合约(Implementation Contract)进行反编译,极大地方便了合约分析工作。通过RPC端点和合约地址,我们能够与区块链节点上的合约进行通信,查询该合约的字节码。合约字节码是编译后的 Solidity 代码,包含了合约的执行逻辑,但不以可读的形式展示。

等风来 1958

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

以太坊智能合约静态分析

作者:高峰 黄绍莽(来自 Qihoo 360 IceSword Lab) 概述 目前,以太坊智能合约的安全事件频发,从The DAO事件到最近的Fomo3D奖池被盗,每次安全问题的破坏力都是巨大的,如何正确防范智能合约的安全漏洞成了当务之急。本文主要讲解了如何通过对智能合约的静态分析进而发现智能合约中的漏洞。由于智能合约部署之后的更新和升级非常困难,所以在智能合约部署之前对其进行静态分析,检测并发...

weixin_34054866的博客 945

以太坊开发入门,完整入门

翻译自:https://medium.com/@mattcondon/getting-up-to-speed-on-ethereum-63ed28821bbe从入门到精通,干货篇。必读,如果你:是一个专业的程序员如果你想了解以太坊当前可以做到什么程度,通过什么,如何做到。预备知识:    1. 你需要知道区块链的概念及实现一个无需信任的电子货币的运作原理。可以先看看长版(https://www.y

架构文摘 8084

终极EVM逆向工程教程:使用Heimdall-rs实现智能合约反编译与漏洞挖掘

Heimdall-rs是一款功能强大的EVM智能合约工具包,专注于字节码分析,为开发者和安全研究人员提供了智能合约反编译、字节码解析和漏洞挖掘的完整解决方案。本教程将带你快速掌握Heimdall-rs的核心功能,从零开始实现智能合约的逆向工程分析。 [![Heimdall-rs EVM工具包](https://raw.gitcode.com/gh_mirrors/he/heimdall-rs/r

gitblog_00294的博客 875

探秘EVM解码神器:evmdis

探秘EVM解码神器:evmdis evmdisEVM disassembler项目地址:https://gitcode.com/gh_mirrors/ev/evmdis 在智能合约的世界里,EVM(以太坊虚拟机)的字节码如同神秘的语言。为了深入理解这些代码的工作原理,我们急需一个强大的工具来解读它们。这就是evmdis,一个功能丰富的EVM反汇编器,它将静态分析与高级抽象相结合,让你对字节码的理...

gitblog_00060的博客 574

智能合约安全系列文章反汇编·上篇

前言 通过上一篇反编译文章的学习,我们对智能合于opcode的反编译有了基础的学习,对于初学者来说,要想熟练运用还得多加练习。本篇我们来一块学习智能合约反汇编,同样使用的是Online Solidity Decompiler在线网站,智能合约反汇编对于初学者来说,较难理解,但对于智能合约代码来说,只要能读懂智能合约反汇编,就可以非常清晰的了解到合约的代码逻辑,对审计合约和CTF智能合约都有非常大的帮助 反汇编内容 由于solidity智能合约的opcode经过反汇编后,指令较多,我们本篇分析简明要义,以一段

m0_37598434的博客 639

深入研究智能合约反编译

从中我们可以看到,`0x06fdde03` *(`name()`)*的函数选择器告诉 EVM 跳转到程序计数器`0xb9`,`0x095ea7b3` *(`approve(address,uint256)`)*的函数选择器告诉 EVM 跳转到程序计数器`0x147`。如果匹配,我们将选择器替换为签名。然后,将此参数添加到`Function`结构体中,并添加一些默认的潜在类型给参数(例如`uint256`、`bytes32`、`int256`、`string`、`bytes`、`uint`、`int`)。

Ray01010的博客 831

ROST情感分析的语法规则_solc编译器分析

一、solc介绍以太坊的智能合约经过编译后运行在虚拟机上,完成整个工作流程,这个过程,需要solc编译器来完成。虽然说solc是一个编译器,但是它又有它与主流编译器不同之处。主要表现在如下几点:1、功能简单支持的基本数据类型只有有限的几种,不支持浮点(或者说想支持,但是目前还没实现)。编译指令也较其它编译器少很多,功能单一。在完成编译时需要借助一些其它辅助的工具。 换一句话说,以太坊的具体需求,也...

weixin_39747615的博客 809
上一篇: Solidity原理(五):EVM Bytecode文件结构以及如何执行
下一篇: 以太坊私有链搭建
Programmer_CJC
博客等级 码龄11年 37粉丝 39原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值