2009-07-20 4 views
6

64 비트 또는 32 비트인지 감지하는 방법 내가 가지고있는 순간에 32 비트 또는 64 비트주어진 PE 파일 (EXE 또는 DLL이) 나는 주어진 .DLL 또는 .exe 파일이 있는지 여부를 감지 할 필요가

유일한 해결책 : 지정된 파일에서 PE 헤더를 읽고 거기에서 '기계'필드를 가져옵니다.

:이 필드는 20 값까지 걸릴 수 있습니다

(사양 섹션에서 Microsoft Portable Executable and Common Object File Format Specification (.DOCX 파일) ". 3.3 COFF는 헤더 (객체 및 이미지) 파일"). 그 중 세 가지가 있습니다 :

IMAGE_FILE_MACHINE_I386 (== 32bit) 

IMAGE_FILE_MACHINE_IA64 (== 64bit) 

IMAGE_FILE_MACHINE_AMD64 (== 64bit) 

내 질문 :

1) '기계'매핑을 비트 수하는 올바른 아니면 내가 뭔가를 그리워 했습니까? 다른주의 사항이 있습니까?

2) 32/64 비트 니스를 감지하는 쉬운 방법이 있습니까 (PE 형식의 일부 특정 필드가 특별한 시스템 기능을 알지 못했을 수 있습니다)?

+0

dup : http://stackoverflow.com/questions/971689/win32-api-to-tell-whether-a-given-binary-exe-or-dll-is-x86-x64-or-ia64/971715 # 971715 –

+0

다른 질문은 아키텍처에 대해 묻고 있는데,이 중 하나는 단어 크기를 묻는 것입니다. – Draemon

+0

문서는 2017 년 현재 v8에서 v11로 업데이트됩니다. http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx –

답변

15

GetBinaryType(...)은 Windows 기반 응용 프로그램의 경우 및 SCS_64BIT_BINARY 인 경우 32 비트 Windows 기반 응용 프로그램의 경우 SCS_32BIT_BINARY을 반환합니다.

+0

이것은 불행하게도 DLL을 분석 할 때 0을 반환합니다. – Benoit

+0

파이썬으로 만들었습니다 : import win32file; win32file.GetBinaryType ("myfile.exe")을 인쇄하십시오. 이것은 32 비트의 exe에 대해 0을 반환하거나 64 비트의 파일에 대해 6을 반환합니다. –

관련 문제