You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
750 B
47 lines
750 B
#!/usr/bin/perl |
|
|
|
|
|
$file = $ARGV[0]; |
|
|
|
|
|
open(IN,$file) || die print "Failed to open file: $file : $!"; |
|
|
|
read(IN,$buffer,1); |
|
read(IN,$buffer2,1); |
|
if (ord($buffer) != 0x41 && ord($buffer2) != 0x50) { |
|
print "bad header ". $buffer ." ".$buffer2. "\n"; |
|
exit; |
|
} |
|
read(IN,$buffer,1); |
|
if (ord($buffer) != 2) { |
|
print "bad version"; |
|
exit; |
|
} |
|
|
|
# spare |
|
read(IN,$buffer,1); |
|
|
|
$a = 0; |
|
|
|
while (read(IN,$buffer,1)) { |
|
$pos = (tell(IN) - 1); |
|
|
|
$size = ((ord($buffer) & 63)); |
|
|
|
read(IN,$buffer,1); |
|
|
|
if (ord($buffer) == 0xff) { |
|
printf("end sentinel at %u\n", $pos); |
|
last; |
|
} |
|
|
|
printf("%04x: key %u size %d\n ", $pos, ord($buffer), $size + 1); |
|
|
|
for ($i = 0; $i <= ($size); $i++) { |
|
read(IN,$buffer,1); |
|
printf(" %02x", ord($buffer)); |
|
} |
|
print "\n"; |
|
} |
|
|
|
close IN; |