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 神奇豆子
每月下载量9,233次
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
脚本,并传入一个以太坊主网地址数组。(需要先安装foundry
和pyevasm
)。
依赖项
~200KB