123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
-
-
-
-
-
-
-
- use strict;
-
- use bytes;
-
- main(@ARGV);
-
- sub usage
- {
- my ($err) = @_;
- print STDERR $err , "\n";
- die "Usage $0 prrefix file bss_size\n";
- }
- sub main
- {
- my ($prefix_name, $suffix_name, $bss_size) = @_;
- usage("No prefix") unless (defined($prefix_name));
- usage("No suffix") unless (defined($suffix_name));
- usage("No bss size") unless (defined($bss_size));
-
- open(PREFIX, "<$prefix_name") or die "Cannot open $prefix_name";
- open(SUFFIX, "<$suffix_name") or die "Cannot open $suffix_name";
-
- $/ = undef;
- my $prefix = <PREFIX>; close(PREFIX);
- my $suffix = <SUFFIX>; close(SUFFIX);
-
-
- my $payload_size = length($suffix);
- my $payload_bss = $bss_size;
-
-
- my $hdr_off = unpack("V",substr($prefix, 0x3c, 4));
- my $image_size_off = 0x050 + $hdr_off;
- my $img_mem_size_off = 0x0c0 + $hdr_off;
- my $img_size_off = 0x0c8 + $hdr_off;
-
- my $image_size = unpack("V", substr($prefix, $image_size_off, 4));
- my $img_mem_size = unpack("V", substr($prefix, $img_mem_size_off, 4));
- my $img_size = unpack("V", substr($prefix, $img_size_off, 4));
-
- $image_size += $payload_size + $payload_bss;
- $img_mem_size += $payload_size + $payload_bss;
- $img_size += $payload_size;
-
- substr($prefix, $image_size_off, 4) = pack("V", $image_size);
- substr($prefix, $img_mem_size_off, 4) = pack("V", $img_mem_size);
- substr($prefix, $img_size_off, 4) = pack("V", $img_size);
-
-
-
-
-
- print $prefix;
- print $suffix;
- }
|