Advertisement
sconosciuto

extract-ramdisk.pl

Jun 23rd, 2012
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.59 KB | None | 0 0
  1. #!/usr/bin/perl -W
  2.  
  3. use strict;
  4. use bytes;
  5. use File::Path;
  6.  
  7. die "did not specify boot img file\n" unless $ARGV[0];
  8.  
  9. my $bootimgfile = $ARGV[0];
  10.  
  11. my $slurpvar = $/;
  12. undef $/;
  13. open (BOOTIMGFILE, "$bootimgfile") or die "could not open boot img file: $bootimgfile\n";
  14. binmode(BOOTIMGFILE);
  15. my $bootimg = <BOOTIMGFILE>;
  16. close BOOTIMGFILE;
  17. $/ = $slurpvar;
  18.  
  19.  
  20. my($bootMagic, $kernelSize, $kernelLoadAddr, $ram1Size, $ram1LoadAddr, $ram2Size, $ram2LoadAddr, $tagsAddr, $pageSize, $unused1, $unused2, $bootName, $cmdLine, $id) =
  21.     unpack('a8 L L L L L L L L L L a16 a512 a8', $bootimg);
  22.    
  23.  
  24. my($kernelAddr) = $pageSize;
  25. my($kernelSizeInPages) = int(($kernelSize + $pageSize - 1) / $pageSize);
  26.  
  27. my($ram1Addr) = (1 + $kernelSizeInPages) * $pageSize;
  28.  
  29. my($ram1) = substr($bootimg, $ram1Addr, $ram1Size);
  30.  
  31. sub extract {
  32.     binmode(RAM1FILE);
  33.     print RAM1FILE $ram1 or die;
  34.     close RAM1FILE;
  35.  
  36.     if (-e "$ARGV[0]-ramdisk") {
  37.         rmtree "$ARGV[0]-ramdisk";
  38.         print "\nremoved old directory $ARGV[0]-ramdisk\n";
  39.     }
  40.  
  41.     mkdir "$ARGV[0]-ramdisk" or die;
  42.     chdir "$ARGV[0]-ramdisk" or die;
  43. }
  44.  
  45.  
  46. if (substr($ram1, 0, 2) eq "\x1F\x8B") {
  47.     print "gzip\n";
  48.     open (RAM1FILE, ">$ARGV[0]-ramdisk.cpio.gz");
  49.     extract();
  50.     system ("gzip -d -c ../$ARGV[0]-ramdisk.cpio.gz | cpio -i");
  51.     system ("rm ../$ARGV[0]-ramdisk.cpio.gz");
  52. } elsif ($ram1 =~ /\x5D\x00...\xFF\xFF\xFF\xFF\xFF\xFF/) {
  53.     print "lzma\n";
  54.     open (RAM1FILE, ">$ARGV[0]-ramdisk.cpio.lzma");
  55.     extract();
  56.     system ("lzcat ../$ARGV[0]-ramdisk.cpio.lzma | cpio -i");
  57.     system ("rm ../$ARGV[0]-ramdisk.cpio.lzma");
  58. } else {
  59.     die "Not a gzip nor a lzma file";
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement