osmocom-bb/src/host/osmocon/memdump_convert.pl

30 lines
768 B
Perl
Executable File

#!/usr/bin/perl
my $num_line = 0;
my $num_hex = 0;
my $oldaddr;
while (my $line = <STDIN>) {
chomp($line);
$num_line++;
my (@hex) = $line =~ /(\w{8}): (\w{8}) (\w{8}) (\w{8}) (\w{8}) (\w{8}) (\w{8}) (\w{8}) (\w{8})/;
my $addr = hex(shift @hex);
if ($addr != 0 && $addr != $oldaddr + 0x20) {
printf(STDERR "gap of %u between 0x%08x and 0x%08x\n%s\n",
$addr - $oldaddr, $addr, $oldaddr, $line);
}
foreach my $h (@hex) {
$num_hex++;
# poor mans endian conversion
my ($a, $b, $c, $d) = $h =~/(\w\w)(\w\w)(\w\w)(\w\w)/;
my $h_reorder = $d . $c . $b . $a;
# convert into actual binary number
my $tmp = pack('H8', $h_reorder);
syswrite(STDOUT, $tmp, 4);
}
$oldaddr = $addr;
}
printf(STDERR "num lines/num hex: %u/%u\n", $num_line, $num_hex);