#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 2478/week @ 2024-04-18 2179/week @ 2024-04-25 2538/week @ 2024-05-02 1704/week @ 2024-05-09 2340/week @ 2024-05-16 2224/week @ 2024-05-23 2015/week @ 2024-05-30 2485/week @ 2024-06-06 2544/week @ 2024-06-13 2858/week @ 2024-06-20 2261/week @ 2024-06-27 1838/week @ 2024-07-04 2175/week @ 2024-07-11 2105/week @ 2024-07-18 2340/week @ 2024-07-25 2208/week @ 2024-08-01

每月下载量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