braille dump
hex dump with braille characters

braille dump is a drop in replacement for hexdump -C that uses unicode braille characters to display hex codes 0x81..0xff thereby improving the readibility of binary.

download   [Linux] [Windows] [MacOS] [FreeBSD] [OpenBSD] [NetBSD]

usage

Braille Dump will work on Linux 2.6.16+, Windows Vista+, MacOS XNU 15.6+, FreeBSD 12+, OpenBSD 6.4+, or NetBSD 9.1+.

$ curl https://justine.lol/braille/bd.com >bd.com
$ chmod +x bd.com
$ echo 'hello→world→' | ./bd.com
00000000  68 65 6c 6c 6f e2 86 92  77 6f 72 6c 64 e2 86 92  │hello⢚⢠⢁world⢚⢠⢁│
00000010  0a                                                │◙│
00000011

For anything else, the source code is written in ANSI C so you can simply compile it yourself!

example

Here's a concrete example of why braille dump is better at presenting binary data than the old hexdump command. Let's say we wanted to view the binary header to the bd.com program itself. hexdump will show us:

$ hexdump -C bd.com | head -n10
00000000  4d 5a 71 46 70 44 3d 27  0a 00 00 10 00 f8 00 00  |MZqFpD='........|
00000010  00 00 00 00 00 01 00 08  40 00 00 00 00 00 00 00  |........@.......|
00000020  00 00 00 00 4a 54 00 00  00 00 00 00 00 00 00 00  |....JT..........|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 08 0b 00 00  |................|
00000040  b2 40 eb 00 eb 14 90 90  eb 06 48 83 ec 08 31 d2  |.@........H...1.|
00000050  bd 00 00 eb 05 e9 a6 10  00 00 fc 0f 1f 87 3e e0  |..............>.|
00000060  bf 00 70 31 c9 8e c1 fa  8e d7 89 cc fb 0e 1f e8  |..p1............|
00000070  00 00 5e 81 ee 72 00 b8  00 02 50 50 07 31 ff b9  |..^..r....PP.1..|
00000080  00 02 f3 a4 0f 1f 87 d2  ff ea 8e 20 00 00 8e d9  |........... ....|
00000090  b9 00 1b b8 50 00 8e c0  31 c0 31 ff f3 aa 80 fa  |....P...1.1.....|

Whereas braille dump will show us:

[output of braille dump program]

Let's say we're reading 64-bit little endian words. This is a good example of how braille dump does a much better job intuitively revealing the structure of the binary. The old hexdump command does this:

$ hexdump -C bd.com | tail -n10
0000a050  ce 9a 00 00 00 00 00 00  ee 9a 00 00 00 00 00 00  |................|
0000a060  fc 9a 00 00 00 00 00 00  18 9b 00 00 00 00 00 00  |................|
0000a070  28 9b 00 00 00 00 00 00  38 9b 00 00 00 00 00 00  |(.......8.......|
0000a080  48 9b 00 00 00 00 00 00  5e 9b 00 00 00 00 00 00  |H.......^.......|
0000a090  6a 9b 00 00 00 00 00 00  7a 9b 00 00 00 00 00 00  |j.......z.......|
0000a0a0  8c 9b 00 00 00 00 00 00  a2 9b 00 00 00 00 00 00  |................|
0000a0b0  bc 9b 00 00 00 00 00 00  ce 9b 00 00 00 00 00 00  |................|
0000a0c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0000b000

Whereas braille dump does this:

$ ./bd.com bd.com | tail -n10
[output of braille dump program]

troubleshooting

If you get an error like "unable to find an interpreter" or "err:module:import_dll Library" then your system has likely been tuned to use binfmt-misc. You can safely restore the default Linux behavior for just Actually Portable Executables by running the following command:

sudo sh -c "echo ':APE:M::MZqFpD::/bin/sh:' >/proc/sys/fs/binfmt_misc/register"

If you use zsh or fish then you may need to run:

echo hi | bash ./bd.com

Instead of:

echo hi | ./bd.com

Please note, we successfully upstreamed patches to both months ago!

charmap

▁
0x00
☺
0x01
☻
0x02
♥
0x03
♦
0x04
♣
0x05
♠
0x06
•
0x07
◘
0x08
○
0x09
◙
0x0A
♂
0x0B
♀
0x0C
♪
0x0D
♫
0x0E
☼
0x0F
►
0x10
◄
0x11
↕
0x12
‼
0x13
0x14
§
0x15
▬
0x16
↨
0x17
↑
0x18
↓
0x19
→
0x1A
←
0x1B
∟
0x1C
↔
0x1D
▲
0x1E
▼
0x1F
 
0x20
!
0x21
"
0x22
#
0x23
$
0x24
%
0x25
&
0x26
'
0x27
(
0x28
)
0x29
*
0x2A
+
0x2B
,
0x2C
-
0x2D
.
0x2E
/
0x2F
0
0x30
1
0x31
2
0x32
3
0x33
4
0x34
5
0x35
6
0x36
7
0x37
8
0x38
9
0x39
:
0x3A
;
0x3B
<
0x3C
=
0x3D
>
0x3E
?
0x3F
@
0x40
A
0x41
B
0x42
C
0x43
D
0x44
E
0x45
F
0x46
G
0x47
H
0x48
I
0x49
J
0x4A
K
0x4B
L
0x4C
M
0x4D
N
0x4E
O
0x4F
P
0x50
Q
0x51
R
0x52
S
0x53
T
0x54
U
0x55
V
0x56
W
0x57
X
0x58
Y
0x59
Z
0x5A
[
0x5B
\
0x5C
]
0x5D
^
0x5E
_
0x5F
`
0x60
a
0x61
b
0x62
c
0x63
d
0x64
e
0x65
f
0x66
g
0x67
h
0x68
i
0x69
j
0x6A
k
0x6B
l
0x6C
m
0x6D
n
0x6E
o
0x6F
p
0x70
q
0x71
r
0x72
s
0x73
t
0x74
u
0x75
v
0x76
w
0x77
x
0x78
y
0x79
z
0x7A
{
0x7B
|
0x7C
}
0x7D
~
0x7E
⌂
0x7F
█
0x80
⡀
0x81
⢀
0x82
⣀
0x83
⠠
0x84
⡠
0x85
⢠
0x86
⣠
0x87
⠄
0x88
⡄
0x89
⢄
0x8A
⣄
0x8B
⠤
0x8C
⡤
0x8D
⢤
0x8E
⣤
0x8F
⠁
0x90
⡁
0x91
⢁
0x92
⣁
0x93
⠡
0x94
⡡
0x95
⢡
0x96
⣡
0x97
⠅
0x98
⡅
0x99
⢅
0x9A
⣅
0x9B
⠥
0x9C
⡥
0x9D
⢥
0x9E
⣥
0x9F
⠃
0xA0
⡃
0xA1
⢃
0xA2
⣃
0xA3
⠣
0xA4
⡣
0xA5
⢣
0xA6
⣣
0xA7
⠇
0xA8
⡇
0xA9
⢇
0xAA
⣇
0xAB
⠧
0xAC
⡧
0xAD
⢧
0xAE
⣧
0xAF
⠉
0xB0
⡉
0xB1
⢉
0xB2
⣉
0xB3
⠩
0xB4
⡩
0xB5
⢩
0xB6
⣩
0xB7
⠍
0xB8
⡍
0xB9
⢍
0xBA
⣍
0xBB
⠭
0xBC
⡭
0xBD
⢭
0xBE
⣭
0xBF
⠊
0xC0
⡊
0xC1
⢊
0xC2
⣊
0xC3
⠪
0xC4
⡪
0xC5
⢪
0xC6
⣪
0xC7
⠎
0xC8
⡎
0xC9
⢎
0xCA
⣎
0xCB
⠮
0xCC
⡮
0xCD
⢮
0xCE
⣮
0xCF
⠑
0xD0
⡑
0xD1
⢑
0xD2
⣑
0xD3
⠱
0xD4
⡱
0xD5
⢱
0xD6
⣱
0xD7
⠕
0xD8
⡕
0xD9
⢕
0xDA
⣕
0xDB
⠵
0xDC
⡵
0xDD
⢵
0xDE
⣵
0xDF
⠚
0xE0
⡚
0xE1
⢚
0xE2
⣚
0xE3
⠺
0xE4
⡺
0xE5
⢺
0xE6
⣺
0xE7
⠞
0xE8
⡞
0xE9
⢞
0xEA
⣞
0xEB
⠾
0xEC
⡾
0xED
⢾
0xEE
⣾
0xEF
⠛
0xF0
⡛
0xF1
⢛
0xF2
⣛
0xF3
⠻
0xF4
⡻
0xF5
⢻
0xF6
⣻
0xF7
⠟
0xF8
⡟
0xF9
⢟
0xFA
⣟
0xFB
⠿
0xFC
⡿
0xFD
⢿
0xFE
⣿
0xFF

credit

Braille Dump is authored and maintained by Justine Tunney. The extended braille charmap was designed by Google Information Security Engineer Ange Albertini. The glyphs used to display control codes were designed by IBM back in the early 1980's for the original personal computer, known as Code Page 437. What remains was designed by the American Standards Institute circa 1963 in X3.4.

If you liked braille dump then please become a GitHub sponsor or join Justine's Patreon. PayPal donations are also accepted at jtunney@gmail.com.

see also

αcτµαlly pδrταblε εxεcµταblε
justine's web page