#! /usr/bin/perl use strict; use warnings; my $seen = 0; while (<<>>) { /^\s*Start\s+Stop\s+Length\s+Name\s+/ and $seen = 1; if ($seen and /^\s*([0-9A-Fa-f]+)[Hh]? \s+[0-9A-Fa-fHh]+ \s+([0-9A-Fa-f]+)[Hh]? \s+STACK\b/ix) { my $start = hex($1); my $length = hex($2); $start -= 256; printf ("%04XH %04Xh\n", $start, $length); open my $input, "<", "testwlp.exe"; binmode($input); open my $output, ">", "testwlp.bin"; binmode($output); my $buffer; read($input, $buffer, $start); print { $output } ($buffer); seek($input, 0, 2); my $filesize = tell($input); seek($input, $start + $length, 0); my $trailsize = $filesize - ($start + $length); read($input, $buffer, $trailsize); print { $output } ($buffer); last; } }