#evm #bytecode #human-readable #opcode #string #individual #disassembler

evm-disassembler

将EVM字节码反汇编成单个操作码并以人类可读的字符串格式化

5个版本 (破坏性更新)

0.5.0 2024年3月15日
0.4.0 2024年1月19日
0.3.0 2023年10月24日
0.2.0 2023年3月13日
0.1.0 2023年3月10日

#166 in 神奇豆子

Download history • Rust 包仓库 2478/week @ 2024-04-18 • Rust 包仓库 2179/week @ 2024-04-25 • Rust 包仓库 2538/week @ 2024-05-02 • Rust 包仓库 1704/week @ 2024-05-09 • Rust 包仓库 2340/week @ 2024-05-16 • Rust 包仓库 2224/week @ 2024-05-23 • Rust 包仓库 2015/week @ 2024-05-30 • Rust 包仓库 2485/week @ 2024-06-06 • Rust 包仓库 2544/week @ 2024-06-13 • Rust 包仓库 2858/week @ 2024-06-20 • Rust 包仓库 2261/week @ 2024-06-27 • Rust 包仓库 1838/week @ 2024-07-04 • Rust 包仓库 2175/week @ 2024-07-11 • Rust 包仓库 2105/week @ 2024-07-18 • Rust 包仓库 2340/week @ 2024-07-25 • Rust 包仓库 2208/week @ 2024-08-01 • Rust 包仓库

每月下载量9,233次

MIT/Apache

130KB
543

反汇编EVM字节码

一个轻量级的库,其主要目的是将evm字节码解码为单个操作码并以人类可读的方式格式化

灵感

这个库受到了pyevmasm的启发。当使用内置函数格式化解码的操作时,输出应该与pyevasm的输出等效,这在几个大型evm合同的字节码上进行了测试。

安装

cargo添加evm-disassembler

文档

请参阅API参考此处

示例

use evm_disassembler::{disassemble_str, disassemble_bytes, format_operations};

fn main() {
   
  let bytecode = "608060405260043610603f57600035";
  // Decode from string directly
  let instructions = disassemble_str(bytecode).unwrap();
  println!("{}", format_operations(instructions));

  let bytes = hex::decode(bytecode).unwrap();
  // Decode from Vec<u8> with identical output as above
  let instructions_from_bytes = disassemble_bytes(bytes).unwrap();
  println!("{}", format_operations(instructions_from_bytes));

}

测试

您可以使用cargo测试运行测试。主测试比较了此库在解码合约字节码时与pyevasm的输出。这些测试的输入和参考文件保存在testdata中。要为这些测试生成新的测试数据,您可以运行generate_testdata.sh脚本,并传入一个以太坊主网地址数组。(需要先安装foundrypyevasm)。

依赖项

~200KB