6 releases
0.2.2 | Aug 10, 2020 |
---|---|
0.2.1 | Aug 8, 2020 |
0.1.3 | Aug 5, 2020 |
#4 in #xxd
11KB
171 lines
chisai
Convert binaries into code that can be embedded statically.
Almost at full parity with strliteral
and definitely not against xxd
.
Many features are WIP.
chisai 0.2.0
Hanif Bin Ariffin <hanif.ariffin.4326@gmail.com>
Transform binaries into embeddable code.
USAGE:
chisai [FLAGS] [OPTIONS] <input-file-name> <language> [ARGS]
FLAGS:
--always-escape Always escape every byte with an octal escape.
-h, --help Prints help information
--no-const Generated variables are mutable.
-V, --version Prints version information
OPTIONS:
--format <format> The format of the values.
--variable-name <output-variable-name> Specify the name of the output variable.
--variable-per-line <variable-per-line> For every N variable, append a newline.
ARGS:
<input-file-name> Input file.
<language> Desired language of the generated code.
<output-file-name> Output file.
<output-length> If specified, the length of the vector will also be generated.
Benchmark
Using hyperfine
by applying the programs to target/debug/chisai
itself.
hbina@hbinalapt:~/git/chisai$ ./profile.sh
Finished release [optimized] target(s) in 0.02s
-rwxrwxr-x 2 hbina hbina 14234544 Aug 7 21:57 target/debug/chisai
Benchmark #1: xxd -i target/debug/chisai
Time (mean ± σ): 1.465 s ± 0.019 s [User: 1.459 s, System: 0.004 s]
Range (min … max): 1.436 s … 1.499 s 10 runs
Benchmark #1: xxd-rs generate target/debug/chisai
Time (mean ± σ): 5.630 s ± 0.231 s [User: 2.358 s, System: 3.266 s]
Range (min … max): 5.381 s … 6.057 s 10 runs
Benchmark #1: ./strliteral target/debug/chisai
Time (mean ± σ): 124.2 ms ± 5.1 ms [User: 120.1 ms, System: 3.9 ms]
Range (min … max): 109.4 ms … 133.0 ms 23 runs
Benchmark #1: target/release/chisai --format=hex target/debug/chisai cpp
Time (mean ± σ): 576.9 ms ± 7.1 ms [User: 3.377 s, System: 0.285 s]
Range (min … max): 565.4 ms … 588.1 ms 10 runs
chisai
is ~3x faster than xxd
and leagues faster than xxd-rs
.
The program is still a lot slower than strliteral
.
I think we could achieve performance parity if we can preallocate memory buffer for the output.
However, this is quite tricky to do without digging deep and writing necromonicons...
Dependencies
~3MB
~50K SLoC