#! /usr/bin/perl -w # # Perl utility for (re)creating an executable from a hexdump # [Dump is assumed to be in `hexdump -v' format] # # Copyright (C) 1998 Amit Singh. All Rights Reserved. # ($#ARGV == 1) or die "usage: $0 \n"; my $hexd = $ARGV[0]; my $exec = $ARGV[1]; open (B, "<$hexd") or die "open: $hexd ($!)\n"; (-e $exec) and die "exiting: will not overwrite existing file \"$exec\"\n"; ($exec) and open (C, ">$exec") or die "open: $exec ($!)\n"; my @D = ; close (B); my $bytes = 0; my $BYTESPERWORD = 4; my $temp = undef; my ($addr, @l, $w, $bin, $previous) = (undef, undef, undef, undef, undef); foreach $_ (@D) { chomp; $temp = $_; if (/^\*$/) { ($previous) or die "exiting: illegal hexdump\n"; print "warning: treating lone * in hexdump same as previous\n"; $temp = $previous; } else { $previous = $temp; } $_ = $temp; ($addr, @l) = split; foreach $w (@l) { $w = reverse($w); $bin = pack "h*", $w; syswrite C, $bin, $BYTESPERWORD; $bytes += 2; } @l = (); } close(C); print "$exec is $bytes bytes\n"; # FINIS