#fuel #bytecode #disassembler #instructions #vm #readable #name

app forc-dis

为Fuel VM字节码提供的漂亮的反汇编器

3个版本

0.2.2 2022年12月31日
0.2.1 2022年12月17日
0.2.0 2022年12月13日

50 in #disassembler

MIT 许可证

81KB
1.5K SLoC

fuel反汇编器

用于Fuel虚拟机字节码的反汇编器。

Nice Colours

关于

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