3个版本
0.2.2 | 2022年12月31日 |
---|---|
0.2.1 | 2022年12月17日 |
0.2.0 | 2022年12月13日 |
50 in #disassembler
81KB
1.5K SLoC
fuel反汇编器
用于Fuel虚拟机字节码的反汇编器。
关于
forc实用工具提供了parse-bytecode
命令,该命令将打印出从合同二进制字节码中解码的原始值的不带注释的反汇编。它假设每个32位字都是一个可执行指令,尽管它尝试在可能的地方输出一些有用的注释。但通常很难阅读。
forc-dis
试图生成更易于阅读的反汇编。它将从入口点开始跟随控制流,不对解码的字节是指令还是数据进行假设。它还给出可读的寄存器名称,注释了被内存指令读取的位置以及VM使用的已知常量值。
它还以相当令人愉悦的色彩方案对列表进行语法高亮。
安装
通过crates.io
cargo install forc-dis
通过源代码
克隆此存储库并使用Cargo按常规构建。
git clone https://github.com/otrho/fuel-dis.git
cd fuel-dis
cargo build --release
然后可以使用cargo run --release
在原地运行。或者可以使用cargo install --path .
进行安装。
使用
forc-dis
将字节码二进制的路径作为命令行参数。
或者,如果forc-dis
在您的路径中,它可以作为Forc插件使用。在Forc项目中,可以使用forc dis
调用它,在这种情况下,它将尝试自动找到字节码二进制文件。
示例
$ forc new example
To compile, use `forc build`, and to run tests use `forc test`
----
Read the Docs:
- Sway Book: https://fuellabs.github.io/sway/latest
- Rust SDK Book: https://fuellabs.github.io/fuels-rs/latest
- TypeScript SDK: https://github.com/FuelLabs/fuels-ts
Join the Community:
- Follow us @SwayLang: https://twitter.com/SwayLang
- Ask questions in dev-chat on Discord: https://discord.com/invite/xfpK4Pe
Report Bugs:
- Sway Issues: https://github.com/FuelLabs/sway/issues/new
$ cd example/
$ cat src/main.sw
contract;
abi MyContract {
fn test_function() -> bool;
}
impl MyContract for Contract {
fn test_function() -> bool {
true
}
}
$ forc build
Creating a new `Forc.lock` file. (Cause: lock file did not exist)
Adding core
Adding std git+https://github.com/fuellabs/sway...
Created new lock file at...
Compiled library "core".
Compiled library "std".
Compiled contract "example".
Bytecode size is 60 bytes.
$ forc dis
00000000 ji block_0010
00000004 47 00 00 00 G...
00000008 WORD 0000000000000034h ; load @ 00000010
00000010 block_0010: ; from 00000000
00000010 lw $ds $is 1 ; $ds = 0000000000000034h
00000014 add $ds $ds $is
00000018 lw $r0 $fp 73
0000001c lw $r1 $ds 0 ; $r1 = 000000002151bd4bh
00000020 eq $r2 $r0 $r1
00000024 jnzi $r2 block_0030
00000028 movi $tmp 123
0000002c rvrt $tmp
00000030 block_0030: ; from 00000024
00000030 ret $one
00000034 DATA SECTION:
00000034 WORD 000000002151bd4bh ; load @ 0000001c
依赖关系
~0.8–1.4MB
~31K SLoC