René Nyffenegger's collection of things on the web | |
René Nyffenegger on Oracle - Most wanted - Feedback
- Follow @renenyffenegger
|
hexdumper [Perl] | ||
hexdumper.pm
package hexdumper; use strict; use warnings; my $spaces=' '; sub new { my $obj = shift; my $self = {}; $self -> {buf} = ""; $self -> {byte_cnt} = 0; $self -> {width} = shift; return bless $self, $obj; } sub write { my $self = shift; my $bytes= shift; my $ret = ""; if ($self->{byte_cnt} == 0) { $ret .= sprintf("%6d: ", $self->{byte_cnt}); } for (my $pos = 0; $pos < length($bytes); $pos++) { my $cur_byte = substr($bytes, $pos, 1); $self->{byte_cnt} ++; if (ord($cur_byte) >= 32 and ord($cur_byte) <= 126) { # printable $self->{buf} .= $cur_byte; } else { $self->{buf} .= ' '; } $ret .= sprintf("%02x ", ord($cur_byte)); if (length($self->{buf}) == $self->{width}) { $ret .= $spaces . $self->{buf} . "\n"; $ret .= sprintf("%6d: ", $self->{byte_cnt}); $self->{buf} = ""; } } return $ret; } sub end { my $self = shift; return " " x ($self->{width} - $self->{byte_cnt} % $self->{width}) . $spaces . $self->{buf}; } 1; Using the packageuse strict; use warnings; use hexdumper; my $out=""; my $hexdumper = new hexdumper(16); $out .= $hexdumper -> write(<<END); first some ascii text is written. This text is then followed by fourty random bytes. END for (my $i=0; $i<40; $i++) { $out .= $hexdumper -> write(chr(int(rand()*256))); } $out .= $hexdumper -> write("Then, "); $out .= $hexdumper -> write("more text is "); $out .= $hexdumper -> write("appended."); $out .= $hexdumper -> end; print $out;
The script produces:
$ perl usehexdumper.pl.raw 0: 66 69 72 73 74 20 73 6f 6d 65 20 61 73 63 69 69 first some ascii 16: 20 74 65 78 74 20 69 73 20 77 72 69 74 74 65 6e text is written 32: 2e 20 54 68 69 73 0a 74 65 78 74 20 69 73 20 74 . This text is t 48: 68 65 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 hen followed by 64: 66 6f 75 72 74 79 0a 72 61 6e 64 6f 6d 20 62 79 fourty random by 80: 74 65 73 2e 0a fc 9b 51 c6 78 f6 aa e8 84 a9 66 tes. Q x f 96: 36 26 8a 66 45 c5 0d 47 27 4f 78 dd 31 be d4 d0 6& fE G'Ox 1 112: 19 8f 26 da 1b d8 43 bc 1e 07 de 45 84 54 68 65 & C E The 128: 6e 2c 20 6d 6f 72 65 20 74 65 78 74 20 69 73 20 n, more text is 144: 61 70 70 65 6e 64 65 64 2e appended. Links
This package is used in On a breakable Oracle to demonstrate a critical security bug.
|