getpearch.pl: the PE header offset may be > 255

The PE header offset field is not a byte; assume it is a long.  The
specification doesn't actually say...

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:
H. Peter Anvin 2017-04-06 16:20:50 -07:00
parent 913394d52f
commit c822585e77

View File

@ -5,6 +5,7 @@
# #
use strict; use strict;
use bytes;
my %archnames = ( my %archnames = (
0x01de => 'am33', 0x01de => 'am33',
@ -38,8 +39,8 @@ read($fh, my $mz, 2);
exit 0 if ($mz ne 'MZ'); exit 0 if ($mz ne 'MZ');
exit 0 unless (seek($fh, 0x3c, 0)); exit 0 unless (seek($fh, 0x3c, 0));
exit 0 unless (read($fh, my $pe_offset, 1) == 1); exit 0 unless (read($fh, my $pe_offset, 4) == 4);
$pe_offset = unpack("C", $pe_offset); $pe_offset = unpack("V", $pe_offset);
exit 0 unless (seek($fh, $pe_offset, 0)); exit 0 unless (seek($fh, $pe_offset, 0));
read($fh, my $pe, 4); read($fh, my $pe, 4);