Как я могу определить машину, на которой может работать данная DLL. Существует множество платформ ARM, SH4, x64, x32. Когда у меня нет другой информации, кроме самой DLL, как это сделать?
Справочная информация: есть отключенные библиотеки DLL, и некоторые из них не подходят. Как обнаружить их «в автономном режиме»?
РЕШЕНИЕ
Спасибо за помощь: я использую решение на языке Perl
#!/usr/bin/perl
#
# usage: DllVer <exefile>
#
use strict;
use warnings;
use diagnostics;
my $exe = $ARGV[0];
my $doshdr; my $pehdr;
my %machines = (
0x014c => "I386",
0x0162 => "R3000",
0x0166 => "R4000",
0x0168 => "R10000",
0x0169 => "WCEMIPSV2",
0x0184 => "ALPHA",
0x01a2 => "SH3",
0x01a3 => "SH3DSP",
0x01a4 => "SH3E",
0x01a6 => "SH4",
0x01c0 => "ARM",
0x01c2 => "THUMB",
0x01d3 => "AM33",
0x01f0 => "POWERPC",
0x01f1 => "POWERPCFP",
0x0200 => "IA64",
0x0266 => "MIPS16",
0x0284 => "ALPHA64",
0x0366 => "MIPSFPU",
0x0466 => "MIPSFPU16",
0x0520 => "TRICORE",
0x8664 => "AMD64",
0x9041 => "M32R",
);
open(EXE, $exe) or die "can't open $exe: $!";
binmode(EXE);
if (read(EXE, $doshdr, 68)) {
my ($magic,$skip,$offset)=unpack('a2a58l', $doshdr);
die("Not an executable") if ($magic ne 'MZ');
seek(EXE, $offset, 0);
if (read(EXE, $pehdr, 6)){
my ($sig,$skip,$machine)=unpack('a2a2v', $pehdr);
die("No a PE Executable") if ($sig ne 'PE');
if (exists $machines{$machine}) {
print $machines{$machine} . "\n";
}
else{
printf("Unknown machine type 0x%lx\n", $machine);
}
}
}
close(EXE);