8 releases (breaking)
0.7.0 | Nov 16, 2023 |
---|---|
0.6.0 | May 7, 2023 |
0.5.0 | Sep 14, 2022 |
0.4.0 | Aug 3, 2022 |
0.1.1 | May 21, 2022 |
#2214 in Parser implementations
250KB
6K
SLoC
hlbc-cli
Hashlink bytecode disassembler, decompiler and analyzer command line interface.
This crate is a program, see hlbc for the core bytecode library or hlbc-decompiler for the decompiler library
Installation
Download a prebuilt binary from the releases page (built from the CI, Windows & Linux).
Or build from the latest version :
cargo install hlbc-cli
Or build the crate from the latest sources :
git clone https://github.com/Gui-Yom/hlbc
cd hlbc-cli
cargo build --release
# The resulting binary can be found in ../target/release
Usage
hlbc <file> [-c <command>] [-w <command>]
You get access to a prompt where you can enter commands.
You can execute commands on startup with the -c
switch.
e.g. Dump all strings from the bytecode then exit : hlbc main.hl -c "s ..; exit"
.
If you omit the exit
command, the app will simply launch the normal prompt after executing the startup commands.
With -w
, the given command will execute each time the file changes. The cli won't show a command prompt.
You can also pass a .hx
file containing Haxe source code directly to be compiled on the fly if the haxe compiler is
present in the PATH
.
Commands
exit
Exit the programhelp
Help messageexplain <op>
Get information about an opcodewiki
Open the bytecode wiki page in a browserinfo
General information about the bytecodeentrypoint
Get the bytecode entrypointi|int <idx>
Get the int at indexf|float <idx>
Get the float at indexs|string <idx>
Get the string at indexsstr <str>
Find a stringd|debugfile <idx>
Get the debug file name at indexsfile <str>
Find the debug file namedt|type <idx>
Get the type at indexg|global <idx>
Get global at indexc|constant <idx>
Get constant at indexn|native <idx>
Get native at indexfnh <findex>
Get header of function (findex)fn <findex>
Get function (findex)sfn <str>
Get function namedinfile <idx|str>
Find functions in filefileof <findex>
Get the file where findex is definedrefto <any@idx>
Find references to a given bytecode elementsaveto <filename>
Serialize the bytecode to a filecallgraph <findex> <depth>
Create a dot call graph from a function and a max depthdecomp <findex>
Decompile a functiondecompt <idx>
Decompile a class
Indexes
In most of the commands that accept an index, you can pass a Rust style range too : a..b
, ..b
, a..
, a..=b
, ..
.
Where ..10
means 'select the first 10 items' and ..
means 'display everything'.
Decompiler
The decompiler has its own crate ! More info here.
Changelog
See CHANGELOG.md.
Wiki
A wiki detailing the specifics of Hashlink bytecode is available here or by
using the command wiki
.
Planned features
- Use commands as expressions in arguments to other commands to compose analysis like
fn (entrypoint)
to display the entry function orrefto (sstr Hello)
Dependencies
~6–16MB
~194K SLoC