[Windows] 32비트 또는 64비트 파일은 어떻게 감지합니까?

요 며칠 동안 64비트 윈도우즈 프로그래밍을 하고 있는데, 때때로 사용하는 dll이나lib가 32bit 또는 64bit인 것을 알아야 한다. (64bit의 프로그램은 32bit의lib나 dll를 호출할 수 없다.) 가장 간단한 방법은 윈도우즈 아래의 도구dumpbin을 사용하는 것이다.

dumpbin /headers <filename>

처음 몇 줄에 이 파일의 target machine을 표시합니다. 예를 들어

PE signature found

File Type: DLL

FILE HEADER VALUES
             14C machine (x86)
               1 number of sections
        45499E0A time date stamp Thu Nov 02 03:28:10 2006
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
            2102 characteristics
                   Executable
                   32 bit word machine
                   DLL

OPTIONAL HEADER VALUES
             10B magic # (PE32)

또는 이 퍼블릭 코드를 사용할 수도 있습니다.

#!/usr/bin/perl 
# 
# usage: petype <exefile> 
# 
$exe = $ARGV[0]; 
 
open(EXE, $exe) or die "can't open $exe: $!"; 
binmode(EXE); 
if (read(EXE, $doshdr, 68)) { 
 
   ($magic,$skip,$offset)=unpack('a2a58l', $doshdr); 
   die("Not an executable") if ($magic ne 'MZ'); 
 
   seek(EXE,$offset,SEEK_SET); 
   if (read(EXE, $pehdr, 6)){ 
       ($sig,$skip,$machine)=unpack('a2a2v', $pehdr); 
       die("No a PE Executable") if ($sig ne 'PE'); 
 
       if ($machine == 0x014c){ 
            print "i386
"; } elsif ($machine == 0x0200){ print "IA64
"; } elsif ($machine == 0x8664){ print "AMD64
"; } else{ printf("Unknown machine type 0x%lx
", $machine); } } } close(EXE);

좋은 웹페이지 즐겨찾기