#!/usr/bin/perl -w
use strict;
use vars qw/ $EXE_FILE
$re_Xsnip $re_Xbin $re_Xany
$re_CompanyName $re_FileDescription $re_FileVersion
$re_InternalName $re_LegalCopyright $re_LegalTrademarks
$re_OriginalFilename $re_ProductName $re_ProductVersion
$re_Comments $re_License $re_SpecialBuild
$re_PrivateBuild $re_OLESelfRegister $re_BuildDate
$re_BuildVersion $re_APIVersion $re_WWW
$re_RegistryKey $re_SMemoryVersion
/;
# reads a Windows 32 bit executable and returns the embeded meta data for the
# file, such as CompanyName, Version, etc. Specify the executable file or dll
# you want read by typing in its system path and file name as the value for
# the $EXE_FILE variable immediately below.
$EXE_FILE = 'wubble/wibble/noot.exe';
&read_exe($EXE_FILE);
sub read_exe {
my ($s) = shift(@_);
die(qq[No filename provided! usage: &read_exe([filename]]) unless $s;
die(qq[File "$s" is not a windows 32 bit executable!]) unless -B $s;
local(*EXE); open(EXE, $s) or die(qq[Couldn't open "$s" $!]);
$s =~ s/$re_Xbin+//g; $s =~ s/$re_Xsnip/${\$1}_=NULL_/;
my ($cpy) = $s;
my(
$CompanyName, $FileDescription, $FileVersion,
$InternalName, $LegalCopyright, $LegalTrademarks,
$OriginalFilename, $ProductName, $ProductVersion,
$Comments, $License, $SpecialBuild,
$PrivateBuild, $OLESelfRegister, $BuildDate,
$BuildVersion, $APIVersion, $WWW,
$RegistryKey, $SMemoryVersion
);
$s =~ s/$re_CompanyName(.*?)$re_Xany/$CompanyName=$1/e;
$s = $cpy; $s =~ s/$re_FileDescription(.*?)$re_Xany/$FileDescription=$1/e;
$s = $cpy; $s =~ s/$re_FileVersion(.*?)$re_Xany/$FileVersion=$1/e;
$s = $cpy; $s =~ s/$re_InternalName(.*?)$re_Xany/$InternalName=$1/e;
$s = $cpy; $s =~ s/$re_LegalCopyright(.*?)$re_Xany/$LegalCopyright=$1/e;
$s = $cpy; $s =~ s/$re_LegalTrademarks(.*?)$re_Xany/$LegalTrademarks=$1/e;
$s = $cpy; $s =~ s/$re_OriginalFilename(.*?)$re_Xany/$OriginalFilename=$1/e;
$s = $cpy; $s =~ s/$re_ProductName(.*?)$re_Xany/$ProductName=$1/e;
$s = $cpy; $s =~ s/$re_ProductVersion(.*?)$re_Xany/$ProductVersion=$1/e;
$s = $cpy; $s =~ s/$re_Comments(.*?)$re_Xany/$Comments=$1/e;
$s = $cpy; $s =~ s/$re_License(.*?)$re_Xany/$License=$1/e;
$s = $cpy; $s =~ s/$re_SpecialBuild(.*?)$re_Xany/$SpecialBuild=$1/e;
$s = $cpy; $s =~ s/$re_PrivateBuild(.*?)$re_Xany/$PrivateBuild=$1/e;
$s = $cpy; $s =~ s/$re_OLESelfRegister(.*?)$re_Xany/$OLESelfRegister=$1/e;
$s = $cpy; $s =~ s/$re_BuildDate(.*?)$re_Xany/$BuildDate=$1/e;
$s = $cpy; $s =~ s/$re_BuildVersion(.*?)$re_Xany/$BuildVersion=$1/e;
$s = $cpy; $s =~ s/$re_APIVersion(.*?)$re_Xany/$APIVersion=$1/e;
$s = $cpy; $s =~ s/$re_WWW(.*?)$re_Xany/$WWW=$1/e;
$s = $cpy; $s =~ s/$re_RegistryKey(.*?)$re_Xany/$RegistryKey=$1/e;
$s = $cpy; $s =~ s/$re_SMemoryVersion(.*?)$re_Xany/$SMemoryVersion=$1/e;
$s = $cpy;
$CompanyName = '' unless defined $CompanyName;
$FileDescription = '' unless defined $FileDescription;
$FileVersion = '' unless defined $FileVersion;
$InternalName = '' unless defined $InternalName;
$LegalCopyright = '' unless defined $LegalCopyright;
$LegalTrademarks = '' unless defined $LegalTrademarks;
$OriginalFilename = '' unless defined $OriginalFilename;
$ProductName = '' unless defined $ProductName;
$ProductVersion = '' unless defined $ProductVersion;
$Comments = '' unless defined $Comments;
$License = '' unless defined $License;
$SpecialBuild = '' unless defined $SpecialBuild;
$PrivateBuild = '' unless defined $PrivateBuild;
$OLESelfRegister = '' unless defined $OLESelfRegister;
$BuildDate = '' unless defined $BuildDate;
$BuildVersion = '' unless defined $BuildVersion;
$APIVersion = '' unless defined $APIVersion;
$WWW = '' unless defined $WWW;
$RegistryKey = '' unless defined $RegistryKey;
$SMemoryVersion = '' unless defined $SMemoryVersion;
$CompanyName = substr($CompanyName,0,-1);
$ProductVersion = substr($ProductVersion,0,-1);
$LegalTrademarks = substr($LegalTrademarks,0,-1);
$FileDescription = substr($FileDescription,0,-1);
$LegalCopyright = substr($LegalCopyright,0,-1);
$SpecialBuild = substr($SpecialBuild,0,-1);
$ProductName = substr($ProductName,0,-1);
$InternalName = substr($InternalName,0,-1);
$BuildDate = substr($BuildDate,0,-1);
$OriginalFilename = substr($OriginalFilename,0,-1);
print <<__EXE__
+===============================================================================
| 32 Bit executable | $s
+----------------------+--------------------------------------------------------
| CompanyName | $CompanyName
+----------------------+--------------------------------------------------------
| FileDescription | $FileDescription
+----------------------+--------------------------------------------------------
| FileVersion | $FileVersion
+----------------------+--------------------------------------------------------
| InternalName | $InternalName
+----------------------+--------------------------------------------------------
| LegalCopyright | $LegalCopyright
+----------------------+--------------------------------------------------------
| LegalTrademarks | $LegalTrademarks
+----------------------+--------------------------------------------------------
| OriginalFilename | $OriginalFilename
+----------------------+--------------------------------------------------------
| ProductName | $ProductName
+----------------------+--------------------------------------------------------
| ProductVersion | $ProductVersion
+----------------------+--------------------------------------------------------
| Comments | $Comments
+----------------------+--------------------------------------------------------
| License | $License
+----------------------+--------------------------------------------------------
| SpecialBuild | $SpecialBuild
+----------------------+--------------------------------------------------------
| PrivateBuild | $PrivateBuild
+----------------------+--------------------------------------------------------
| OLESelfRegister | $OLESelfRegister
+----------------------+--------------------------------------------------------
| BuildDate | $BuildDate
+----------------------+--------------------------------------------------------
| BuildVersion | $BuildVersion
+----------------------+--------------------------------------------------------
| APIVersion | $APIVersion
+----------------------+--------------------------------------------------------
| WWW | $WWW
+----------------------+--------------------------------------------------------
| RegistryKey | $RegistryKey
+----------------------+--------------------------------------------------------
| SharedMemoryVersion | $SMemoryVersion
+----------------------+--------------------------------------------------------
__EXE__
} BEGIN {
++$|;
$re_CompanyName = qr/CompanyName/;
$re_FileDescription = qr/FileDescription/;
$re_FileVersion = qr/FileVersion/;
$re_InternalName = qr/InternalName/;
$re_LegalCopyright = qr/LegalCopyright/;
$re_LegalTrademarks = qr/LegalTrademarks/;
$re_OriginalFilename = qr/OriginalFilename/;
$re_ProductName = qr/ProductName/;
$re_ProductVersion = qr/ProductVersion/;
$re_Comments = qr/Comments/;
$re_License = qr/License/;
$re_SpecialBuild = qr/SpecialBuild/;
$re_PrivateBuild = qr/PrivateBuild/;
$re_OLESelfRegister = qr/OLESelfRegister/;
$re_BuildDate = qr/BuildDate/;
$re_BuildVersion = qr/BuildVersion/;
$re_APIVersion = qr/APIVersion/;
$re_WWW = qr/WWW/;
$re_RegistryKey = qr/RegistryKey/;
$re_SMemoryVersion = qr/SharedMemoryVersion/;
$re_Xsnip = qr/
^.*
S.{0,1}
t.{0,1}
r.{0,1}
i.{0,1}
n.{0,1}
g.{0,1}
F.{0,1}
i.{0,1}
l.{0,1}
e.{0,1}
I.{0,1}
n.{0,1}
f.{0,1}
o
(.*?)
V.{0,1}
a.{0,1}
r.{0,1}
F.{0,1}
i.{0,1}
l.{0,1}
e.{0,1}
I.{0,1}
n.{0,1}
f.{0,1}
o
.*/x;
$re_Xbin = qr
/[
\000\001\002\003\004
\005\006\007\010\013
\014\016\017\020\021
\022\023\024\025\026
\027\030\031\032\033
\034\035\036\037
]/x;
$re_Xany = qr
/
CompanyName | FileDescription | FileVersion | InternalName |
LegalCopyright | LegalTrademarks | OriginalFilename | ProductName |
ProductVersion | Comments | License | SpecialBuild |
PrivateBuild | OLESelfRegister | BuildDate | BuildVersion |
APIVersion | WWW | RegistryKey | SharedMemoryVersion
|_=NULL_
/x;
}