hex2 - The trivially bootstrappable linker that is designed to be introspectable
by humans
hex2 --architecture ARCHITECTURE --base-address ADDRESS --file FILE [--output
FILE [--non-executable]]
hex2 is designed to allow humans to write elf and other binary files by hand in
a format that allows comments and ease of understanding.
At its core is read 2 hex characters add them together and output a single byte.
You can override this and use binary or octal input if you so desire, using
the --octal or --binary option.
If no output file is specified the output will be send to standard out. By
default the file will be executable unless the option: --non-executable is
also passed.
The supported ARCHITECTURES are as follows: knight-native, knight-posix, x86,
amd64, armv7l and aarch64. If you fail to specify an architecture, the default
of knight-native will be used.
The base address for which the binary is to be loaded into memory and thus the
relative and absolute pointers should be based, is passed via --base-address
if it is not provided the default value of ZERO will be assumed.
hex2 also support labels in the :LABEL format and relative and absolute pointers
to those labels in 8, 16, 24 or 32bit sizes. !LABEL, @LABEL, ~LABEL and %LABEL
for 8, 16, 24 and 32bit relative addresses respectively and $LABEL and
&LABEL for 16 and 32bit absolute addresses respectively. Should you wish
to specify the bit and byte encoding of the addresses to match your target
--big-endian and --little-endian
On architectures that require word alignment the < and ^ characters have a
special meaning; particularly pad to word and use word base address
calculation rather than standard byte based address calculation; generally
seen in the form: ^~LABEL EB for calls in ARM
Typically, hex2 will be called in scripts used in bootstrapping
# hex2 -f ELF-armv7l.hex2 -f cc.hex2 --little-endian --architecture armv7l
--base-address 0x10000 -o cc
hex2 is compatible with all Turing complete machines; even the ones that try to
be Turing complete -1
Jeremiah Orians <
[email protected]>
Jan (janneke) Nieuwenhuizen <
[email protected]>
Copyright 2016-2019 Jeremiah Orians <
[email protected]>
Copyright 2017 Jan Nieuwenhuizen <
[email protected]>
License GPLv3+.
M1(1),
blood-elf(1),
kaem(1),
syscalls(2)