Làm cách nào để kiểm tra xem nhị phân là 32 hay 64 bit trên Windows?


319

Có cách nào dễ dàng để kiểm tra xem nhị phân là 32 hay 64 bit trên Windows không? Tôi cần kiểm tra trước khi chuyển chương trình sang máy 32 bit và gặp thất bại ngoạn mục.


Câu hỏi này là tương tự , tuy nhiên nó đòi hỏi một số công việc để kiểm tra nó.
ST3

3
@Guillaume: Hình ảnh thực thi không phải là quá trình. Trình quản lý tác vụ chỉ hiển thị các quy trình.
IInspectable

Câu trả lời:


346

Sau khi kiểm tra các giá trị tiêu đề từ câu trả lời của Richard , tôi đã đưa ra một giải pháp nhanh chóng, dễ dàng và chỉ cần một trình soạn thảo văn bản. Ngay cả notepad.exe mặc định của Windows cũng sẽ hoạt động.

  1. Mở tệp thực thi trong trình soạn thảo văn bản. Bạn có thể phải kéo và thả hoặc sử dụng Open...hộp thoại của trình soạn thảo , vì Windows không hiển thị Open with...tùy chọn trong menu ngữ cảnh cho các tệp thực thi.

  2. Kiểm tra các ký tự có thể in đầu tiên sau lần xuất hiện đầu tiên của PE. Phần này rất có thể được bao quanh bởi ít nhất một số khoảng trắng (có thể là rất nhiều), vì vậy nó có thể dễ dàng thực hiện một cách trực quan.

Đây là những gì bạn sẽ tìm thấy:

x86:

PE  L

x64:

PE  d†

Một lời cảnh báo: sử dụng Notepad mặc định trên các tệp lớn có thể rất chậm, vì vậy tốt hơn không sử dụng nó cho các tệp lớn hơn một megabyte hoặc vài. Trong trường hợp của tôi, mất khoảng 30 giây để hiển thị tệp 12 MiB. Notepad ++, tuy nhiên, đã có thể hiển thị một tệp thực thi 120 MiB gần như ngay lập tức.

Đây là giải pháp có thể hữu ích trong trường hợp bạn cần kiểm tra tệp trên máy mà bạn không thể cài đặt bất kỳ phần mềm bổ sung nào.

Thông tin bổ sung:

Nếu bạn có sẵn HEX-Editor, phần bù của Chữ ký PE được đặt ở vị trí bù 0x3C. Chữ ký là PE\0\0(chữ cái "P" và "E" theo sau là hai byte rỗng), theo sau là Loại máy hai byte trong Little Endian.

Các giá trị liên quan là 0x8664cho x64 thực thi và 0x14ccho x86. Có rất nhiều giá trị có thể hơn, nhưng có lẽ bạn sẽ không gặp phải bất kỳ giá trị nào trong số này hoặc có thể chạy các tệp thực thi đó trên PC Windows của mình.

Danh sách đầy đủ các loại máy, cùng với phần còn lại của thông số kỹ thuật .exe có thể được tìm thấy trong phần Loại máy của Microsoft PE và COFF .


21
Này, đây là khá hack. Và để tốt hơn, vì đây thực sự là giải pháp nhanh nhất và dễ dàng nhất cho đại đa số các trường hợp :)
Septagram 13/03/2015

4
Ví dụ hiếm khi notepad đánh bại notepad ++. Notepad cho thấy điều này đúng, trong notepad bạn có vấn đề về mã hóa để hiển thị nhưng nó đã hoạt động!
zar

2
@CoDEmanX tùy chọn này có nghĩa là IDE hoặc JIT đưa ra lựa chọn cho bạn. Xem câu hỏi này hoặc bài đăng trên blog này để biết thêm chi tiết.
Alexander Revo

2
@IInspectable nếu bạn thực sự bận tâm đọc toàn bộ bài viết trước khi hạ cấp nó, bạn sẽ thấy liên kết đến Microsoft PE and COFF Specification, đó là một hợp đồng được ghi lại nhiều nhất có thể, cũng như hướng dẫn về cách tìm địa chỉ chính xác của tiêu đề PE trong bất kỳ .exetập tin. Nếu bạn có một nguồn đáng tin cậy hơn thông số kỹ thuật chính thức của Microsoft về định dạng thực thi của chính Microsoft, tôi rất muốn biết đó là gì.
Alexander Revo

6
Đối với các tệp bắt đầu bằng "MZ", bạn cần xem xét thêm một chút. Tôi tìm thấy PE..L ở offset 0x110, ngay sau "RichMQ _........".
jnnnnn

120

Công cụ SDK dumpbin.exevới /headerstùy chọn bao gồm thông tin này, so sánh hai thông tin này (Tôi đã thêm đậm cho thông tin chính)

PS [64] E: \ # 4> dumpbin / tiêu đề C: \ Windows \ system32 \ cmd.exe
Máy xúc lật Microsoft (R) COFF / PE Phiên bản 10:00.40219.01
Bản quyền (C) Tập đoàn Microsoft. Đã đăng ký Bản quyền.


Kết xuất tệp C: \ Windows \ system32 \ cmd.exe

Chữ ký PE được tìm thấy

Loại tệp: HÌNH ẢNH THỰC HIỆN

GIÁ TRỊ FILE
            Máy 8664 (x64)
               6 số phần
        4CE798E5 thời gian đóng dấu ngày 20 tháng 11 09:46:13 2010
               Con trỏ tệp 0 vào bảng ký hiệu
               0 số ký hiệu
              Kích thước F0 của tiêu đề tùy chọn
              22 đặc điểm
                   Thực thi
                   Ứng dụng có thể xử lý các địa chỉ lớn (> 2GB)
[...]

PS [64] E: \ # 5> dumpbin / tiêu đề C: \ Windows \ syswow64 \ cmd.exe
Máy xúc lật Microsoft (R) COFF / PE Phiên bản 10:00.40219.01
Bản quyền (C) Tập đoàn Microsoft. Đã đăng ký Bản quyền.


Kết xuất tệp C: \ Windows \ syswow64 \ cmd.exe

Chữ ký PE được tìm thấy

Loại tệp: HÌNH ẢNH THỰC HIỆN

GIÁ TRỊ FILE
             Máy 14C (x86)
               4 số phần
        Dấu thời gian 4CE78E2B Thứ bảy ngày 20 tháng 11 09:00:27 2010
               Con trỏ tệp 0 vào bảng ký hiệu
               0 số ký hiệu
              Kích thước E0 của tiêu đề tùy chọn
             102 đặc điểm
                   Thực thi
                   Máy 32 bit
[...]

1
Bạn cũng có thể thấy (IA64) cho exe 64 bit.
Darryl Braaten

21
như tôi đã đọc ở đâu đó trên superuser, sử dụng dumpbin /headers | findstr "machine"đơn giản hóa rất nhiều cách trình bày về những gì QA đang tìm kiếm ...
user1055604 17/03/13

3
Dumpbin.exe được đặt tại đây:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
Devid

3
@David: không nhất thiết (phiên bản khác của VS, không sử dụng vị trí cài đặt mặc định, sử dụng phiên bản từ SDK Windows): đó là lý do tại sao tôi không chỉ định.
Richard

6
Sử dụng dumpbin dễ dàng nhất nếu bạn khởi chạy nó từ dòng lệnh của studio trực quan: stackoverflow.com/a/477389/1390430
Ben

46

Nếu bạn không có hoặc muốn toàn bộ SDK Windows hoặc Visual Studio, bạn có thể sử dụng sigcheck.exetừ SysIternals :

sigcheck.exe C:\Windows\Notepad.exe

Đầu ra:

Sigcheck v2.1 - File version and signature viewer
Copyright (C) 2004-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

c:\windows\notepad.exe:
    Verified:       Signed
    Signing date:   8:59 AM 8/22/2013
    Publisher:      Microsoft Windows
    Description:    Notepad
    Product:        Microsoft« Windows« Operating System
    Prod version:   6.3.9600.16384
    File version:   6.3.9600.16384 (winblue_rtm.130821-1623)
    MachineType:    64-bit

4
Có vẻ không phải lúc nào cũng chính xác: Hãy thử sử dụng nó với LinqPad.exe (phiên bản AnyCPU-64bit) và Sigcheck sẽ cho bạn biết đó là "32 bit" ...
Matt

@Matt thú vị. LinqPad nghe giống như một ứng dụng .net; Tôi tự hỏi nếu sigcheck chỉ hoạt động chính xác trên các tệp thực thi riêng (cho mục đích này).
nghĩa quân phiệt

2
Vâng, nó là một ứng dụng .NET. Trong .NET, nếu nó không được biên dịch trước, bạn có thể nhắm mục tiêu "x86" hoặc "AnyCPU". "x86" sẽ luôn chạy dưới dạng 32 bit, nhưng AnyCPU sẽ chạy ở mức 64 bit trên hệ thống 64 bit, nhưng là 32 bit trên hệ thống 32 bit. SigCheck nên xem xét điều này và hiển thị ít nhất ".NET 32 bit hoặc 64 bit (AnyCPU)". Ví dụ, ILSpy nói trong trường hợp này "Kiến trúc: AnyCPU (ưu tiên 64 bit)" - nhưng ILSpy sẽ không hoạt động cho các phiên bản không phải của .NET EXE.
Matt

1
Đó có thể là trường hợp, giống như tiêu đề "MZ" cũ chỉ dành cho HĐH không phải Windows ("DOS") có nội dung "Ứng dụng này yêu cầu Microsoft Windows" ... ;-)
Matt

2
Vâng, thời xưa tốt đẹp, nơi bạn có trình gỡ lỗi DOS trong trình bao và có thể tháo rời mã (chỉ chứa một cuộc gọi DOS duy nhất in thông báo này) ... và thay thế văn bản bằng "Câu trả lời là 42." :-D
Matt

38

Tôi có thể xác nhận rằng filetiện ích (ví dụ từ cygwin) sẽ phân biệt giữa các tệp thực thi 32 và 64 bit. Chúng xuất hiện như sau:

32.exe: PE32 executable (GUI) Intel 80386, for MS Windows
64.exe: PE32+ executable (console) x86-64, for MS Windows

Như bạn có thể thấy, nó rất rõ ràng. Ngoài ra, nó phân biệt giữa thực thi giao diện điều khiển và GUI, cũng rõ ràng đó là.


1
Giải pháp này khá phổ biến đối với bất kỳ nhà phát triển nào đã cài đặt msysgit.
FrontierPologistso

Tại sao các tập tin thực thi trong windows có MZthay vì PE?
BattleTested

Đáng lưu ý rằng các tiện ích GNU có thể được lấy dưới dạng nhị phân riêng lẻ nếu bạn không cần Cygwin. gnuwin32.sourceforge.net/packages/file.htmlm
MJ Walsh

32

Một phương pháp đơn giản là chạy nó (giả sử bạn tin tưởng nó) và xem qua tab quy trình trong trình quản lý tác vụ. Các quy trình 32 bit sẽ hiển thị "* 32" ở cuối tên quy trình. Nếu đó không phải là thứ bạn sẵn sàng chạy trên máy tính, bạn có thể thử EXE Explorer . Nó sẽ hiển thị một loạt thông tin về các tệp thực thi, bao gồm cả nếu nó là 32 hoặc 64 bit.


8
Thật không may, điều này đòi hỏi bạn phải chạy thực thi. Có lẽ bạn cần kiểm tra kiến ​​trúc của chương trình như một phương pháp khắc phục sự cố tại sao nó không chạy.
Mike Christiansen

6
Làm thế nào để bạn chạy một DLL?
dùng34660


1
@samusarin nên có trong bài.
dùng34660

@ user34660 Về mặt kỹ thuật, DLL không có mainđiểm vào và do đó sẽ không thực hiện như một quy trình độc lập. Có một chức năng khởi tạo được gọi khi nó được tải nhưng đó không phải là "chính".
samis

24

Nhiều người đã cài đặt 7-zip tuyệt vời và đã thêm thư mục 7-Zip vào PATH. 7-zip hiểu các định dạng tệp khác với ZIP và RAR, chẳng hạn như tệp MSI và tệp thực thi PE. Chỉ cần sử dụng dòng lệnh 7z.exetrên tệp PE (exe hoặc DLL) trong câu hỏi:

7z l some.exe | more
7z l some.exe | findstr CPU

Đầu ra sẽ bao gồm các dòng như sau, với CPUdòng đọc x86hoặc x64, đó là những gì đang được hỏi ở đây:

Path = C:\Extra\AV\neroAacEnc.exe
Type = PE
CPU = x86
Characteristics = Executable 32-bit

Path = C:\Extra\AV\LAME\lame_enc.dll
Type = PE
CPU = x86
Characteristics = Executable DLL 32-bit

Path = C:\Extra\AV\FFmpeg\bin\ffmpeg.exe
Type = PE
CPU = x64
64-bit = +
Characteristics = Executable LargeAddress NoRelocs NoLineNums NoLocalSyms NoDebugInfo

Path = C:\Extra\AV\FFmpeg\bin\avcodec-56.dll
Type = PE
CPU = x64
64-bit = +
Characteristics = Executable DLL LargeAddress NoLineNums NoLocalSyms NoDebugInfo

wow Tôi chưa bao giờ biết rằng 7z có thể làm điều này. Có lẽ nó chứa một filethực hiện bên trong?
phuclv

17

Phiên bản 64-bit của Process Explorer có thể cho bạn biết. Chỉ cần chạy tệp thực thi và mở cửa sổ thuộc tính của quy trình. Trên tab chính có một mục ghi "Hình ảnh: 32 bit" hoặc "Hình ảnh: 64 bit".

nhập mô tả hình ảnh ở đây


23
Simply run the executableVà nếu bạn không muốn chạy chương trình thì sao?
Synetech

3
@Synetech Câu hỏi ban đầu không ngụ ý đó là trường hợp.
Andrew Lambert

Đây là phương pháp dễ nhất đối với tôi, trừ khi thực thi thoát quá nhanh.
starbeamrainbowlabs

7
Làm thế nào để bạn chạy một DLL?
dùng34660

15

Cách đơn giản nhất (khi dữ liệu không được bảo mật)

Tôi thấy rằng Virustotal File detail là cách đơn giản nhất để tìm hiểu xem nhị phân là 32 bit hay 64 bit.

Các Additional informationtùy chọn cung cấp thêm thông tin hữu ích về nhiều tập tin.

Phân tích tổng hợp


[CID


12

Phương pháp chạy một tệp thực thi và sau đó kiểm tra trong trình thám hiểm quy trình hoặc công cụ tương tự, có một số nhược điểm rõ ràng:

  1. Chúng tôi phải thực hiện quá trình.
  2. Đối với các quy trình tồn tại ngắn (như echo hello các loại thế giới.), Trình thám hiểm quy trình thậm chí có thể không đăng ký rằng một quy trình mới đã bắt đầu.

Phương pháp Dumpbin.exe có thể giải quyết mục đích có thể.

Một cách khác là sử dụng lệnh tập tin của cygwin . Tuy nhiên, tôi chưa thử nó trên windows. Nó hoạt động tốt trên Linux.

Usage: file program_under_test.exe

EDIT: Chỉ cần kiểm tra file.exe trên cửa sổ. hoạt động tốt :)


1
Chỉ muốn nói rằng, có một số tình huống, trong đó phương pháp của Dracs sẽ không hữu ích lắm.
anishsane

3
>> Điều này vẫn yêu cầu chạy chương trình mà tác giả muốn tránh: Không .. chúng tôi chạy nó như sau: file.exe
chương trình_under_test.exe

1
Và những người muốn tránh cài đặt toàn bộ cygwingói có thể lấy gói gnuwin32file .
Bob

6
@ biến mất hoàn toàn sai. filechỉ cần đọc dữ liệu từ đĩa ở định dạng nhị phân và kiểm tra bất kỳ số ma thuật nào xác định chúng, so sánh với cơ sở dữ liệu. Các chương trình 32 bit của Windows xuất hiện dưới dạng PE32 và cả chương trình 64 bit và .NET đều xuất hiện dưới dạng PE32 +. Độ filebit của chính nó tạo ra sự khác biệt hoàn toàn bằng không - cả ứng dụng 32 bit và 64 bit đều có thể đọc dữ liệu từ đĩa, đó là tất cả những gì nó cần.
Bob

1
@MarcH Hà! Điều đó thật thú vị. Tôi đoán điều đó có nghĩa là sơ khai thời gian chạy .NET là 32 bit. Vì vậy, nó chạy một quy trình 32 bit trong một phần của giây, nhưng tất cả quá trình đó là bắt đầu thời gian chạy .NET, tạo ra một quy trình 64 bit gốc.
clacke

10

Đây là một giải pháp Powershell, không phụ thuộc bên ngoài hay bất cứ điều gì. Mở Powershell, dán chức năng vào đó (nhấn Enter hai lần để bạn quay lại dấu nhắc), sau đó sử dụng nó như trong các ví dụ của tôi bên dưới chức năng:

function Test-is64Bit {
    param($FilePath=“$env:windir\notepad.exe”)

    [int32]$MACHINE_OFFSET = 4
    [int32]$PE_POINTER_OFFSET = 60

    [byte[]]$data = New-Object -TypeName System.Byte[] -ArgumentList 4096
    $stream = New-Object -TypeName System.IO.FileStream -ArgumentList ($FilePath, 'Open', 'Read')
    $stream.Read($data, 0, 4096) | Out-Null

    [int32]$PE_HEADER_ADDR = [System.BitConverter]::ToInt32($data, $PE_POINTER_OFFSET)
    [int32]$machineUint = [System.BitConverter]::ToUInt16($data, $PE_HEADER_ADDR + $MACHINE_OFFSET)
    $stream.Close()

    $result = "" | select FilePath, FileType, Is64Bit
    $result.FilePath = $FilePath
    $result.Is64Bit = $false

    switch ($machineUint) 
    {
        0      { $result.FileType = 'Native' }
        0x014c { $result.FileType = 'x86' }
        0x0200 { $result.FileType = 'Itanium' }
        0x8664 { $result.FileType = 'x64'; $result.is64Bit = $true; }
    }

    $result
}

Đây là ví dụ đầu ra:

D:\> Test-is64bit

FilePath               FileType Is64Bit
--------               -------- -------
C:\Windows\notepad.exe x64         True


D:\> Test-is64bit 'C:\Program Files (x86)\Mozilla Firefox\firefox.exe'

FilePath                                           FileType Is64Bit
--------                                           -------- -------
C:\Program Files (x86)\Mozilla Firefox\firefox.exe x86        False

Độ trơn. Kịch bản trên dường như để lại một tham chiếu đến tệp đang mở. Không thể xây dựng cho đến khi tôi đóng quyền hạn đầu tiên (chạy tập lệnh để thẩm vấn DLL trong \ bin).
samis

1
Rất tuyệt. +1. Itanium chắc chắn là 64 bit mặc dù :)
Rich Homolka

@samusarin: có thể thêm $stream.dispose();sau khi đóng? Nên phát hành tập tin xử lý. ( stackoverflow.com/questions/1999858/ Lời )
Yorik

1
một phiên bản hoàn chỉnh hơn có thể được tìm thấy trong Kiểm tra nếu exe là 64-bit
phuclv

6

Ngay cả một tệp thực thi được đánh dấu là 32 bit cũng có thể chạy là 64 bit, ví dụ, đó là tệp thực thi .NET có thể chạy dưới dạng 32 hoặc 64 bit. Để biết thêm thông tin, hãy xem https://stackoverflow.com/questions/3782191/how-do-i-determine-if-a-net-application-is-32-or-64-bit , trong đó có câu trả lời cho biết rằng Tiện ích CORFLAGS có thể được sử dụng để xác định cách ứng dụng .NET sẽ chạy.

Đầu ra CORFLAGS.EXE

Đối với tệp thực thi 32 bit:

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x3
ILONLY    : 1
32BITREQ  : 1
32BITPREF : 0
Signed    : 0

Đối với thực thi 64 bit:

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32+
CorFlags  : 0x1
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 0
Signed    : 0

Để thực thi có thể chạy dưới dạng 32 hoặc 64 bit và sẽ chạy dưới dạng 64 bit khi có thể:

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x1
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 0
Signed    : 0

Để thực thi có thể chạy dưới dạng 32 hoặc 64 bit, nhưng sẽ chạy dưới dạng 32 bit trừ khi được tải vào quy trình 64 bit:

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x20003
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 1
Signed    : 0

Lệnh tuyệt vời, nhưng nó sẽ không hoạt động đối với các tệp thực thi / dlls gốc (không được quản lý). ( corflags : error CF008 : The specified file does not have a valid managed header)
Tomasz Gandor

@TomaszGandor Có, bối cảnh của câu trả lời này chỉ được quản lý mã. Mã không được quản lý được trả lời bởi các câu trả lời khác. Theo như tôi biết, chỉ có mã được quản lý mới có thể chuyển đổi giữa việc thực thi cả 32 và 64 bit.
BlueMonkMN


3

Nếu bạn đang ở trên Windows 7, trên Windows Explorer, nhấp chuột phải vào tệp thực thi và chọn Thuộc tính. Trong cửa sổ thuộc tính chọn tab Tương thích. Nếu trong phần Chế độ tương thích bạn thấy Windows XP, thì đây là tệp thực thi 32 bit. Nếu bạn thấy Windows Vista, nó là 64 bit.


-1 không đúng chút nào. Các tệp nhị phân 32 và 64 bit khác nhau đều được hiển thị Chế độ tương thích củaWindows 8
Peter Hahndorf

@Peter Tôi đã thử khá nhiều trên Windows 7 và nó luôn hoạt động với tôi. Bạn có thể cho một ví dụ về nhị phân trong đó chế độ tương thích mặc định là Windows 8 không? Ngoài ra bạn đang dùng Windows gì? Cảm ơn.
axxis

Tôi đang dùng Server 2012 R2 và đã thử một vài tệp nhị phân ngẫu nhiên. Một số 32bit hiển thị như Windows XP SP2nhưng những người khác hiển thị như Vistahoặc Windows 8. Vì vậy phương pháp này không đúng.
Peter Hahndorf

3

Cách thêm kiểm tra 32/64 bit vào menu ngữ cảnh của bạn

Tạo một tệp văn bản có tên exetest.reg và chứa mã này:

Windows Registry Editor Version 5.00

; What will appear in the contextual menu when right-clicking on a .exe file
[HKEY_CLASSES_ROOT\exefile\shell\command32_64]
@="32/64 bit test"

; What to do with it
; here, %1 is the file given as argument of the script
[HKEY_CLASSES_ROOT\exefile\shell\command32_64\command]
@="\"c:\\temp\\x86TestStart.bat\" \"%1\""

Tạo một tệp văn bản có tên x86TestStart.batchỉ chứa dòng mã này và lưu nó trong C: \ temp:

c:\temp\x86or64.vbs %1

Tạo một tệp văn bản có tên x86or64.vbschứa mã này và lưu nó trong C: \ temp:

rem Reading binary file in VBScript: http://stackoverflow.com/questions/21249440/modify-first-two-bytes-of-a-file-using-vbscript
rem Info on executables: https://dmoj.ca/problem/exe

rem x86/64 signature is located dinamycally; its position is addressed
rem from bytes in 0x3C-0x3D position.

rem Possible signatures;
rem "PE..L" (hex code: 50.45.00.00.4C) = 32 bit
rem "PE..d†" (hex code: 50.45.00.00.64.86) = 64 bit

' ------------------------------------
' Source code by Jumpkack 2015
' ------------------------------------

' Read all arguments from command line:
Set args = Wscript.Arguments

' Store first argument (full path to file)
FileName = args(0)

' Find address of executable signature:
FirstChars = readBinary(FileName)
FirstChars = FirstChars
Addr1 = asc(mid(FirstChars,61,1))
Addr2 = asc(mid(FirstChars,62,1))
AddrFinal = Addr2*256 + Addr1 + 1

' Check signature:
if ucase(hex(asc(mid(FirstChars,AddrFinal+4,2)))) = "4C" then Wscript.Echo Filename & " is a 32 bit executable."
if ucase(hex(asc(mid(FirstChars,AddrFinal+4,2)))) = "64" then Wscript.Echo Filename & " is a 64 bit executable."


Function readBinary(path)
    Dim a, fso, file, i, ts
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set file = fso.getFile(path)
    If isNull(file) Then
        wscript.echo "File not found: " & path
        Exit Function
    End If
    Set ts = file.OpenAsTextStream()
    'a = makeArray(file.size)
    a=""
    i = 0
    While (Not ts.atEndOfStream) and (i<60000)
       'a(i) = ts.read(1)
       a = a + ts.read(1)
       i = i + 1
    Wend
    ts.close
    readBinary = a
 End Function

Nhấp đúp chuột vào tập tin exetest.reg: một khóa mới sẽ được thêm vào sổ đăng ký windows:

[HKEY_CLASSES_ROOT\exefile\shell\command32_64\command]

Nó sẽ xuất hiện dưới dạng " 32/64 bit test " trong menu ngữ cảnh khi nhấp chuột phải vào tệp thực thi.

Nhấp vào mục sẽ dẫn đến bắt đầu tệp bó c:\\temp\\x86TestStart.bat\, bắt đầu tệp VBscript x86or64.vbs, đọc chữ ký exe và hiển thị kết quả.

Nếu bạn không thể hoặc không muốn giả mạo đăng ký, chỉ cần sao chép tệp .vbs trong thanh QuickLaunch và kéo tệp thực thi trên nó.


3

Hai xu của tôi sẽ chỉ là tải xuống walker walker và kiểm tra những gì cho kiến ​​trúc đã được sử dụng trong một trong các tập tin thực thi.

Làm thế nào để sử dụng nó:

Chỉ cần tải xuống ứng dụng, khởi động nó, nhấp vào biểu tượng mở → tìm tệp * .exe → chọn và ở phía dưới sau khi quét phản chiếu xong bạn thấy một lưới có dữ liệu trong đó một cột có chi tiết "kiến trúc" trong đó (x86, x64)

Mở thực thi và xem kiến ​​trúc xây dựng

ảnh chụp màn hình phụ thuộc walker


1

Tôi chưa thấy điều này được đề cập. Có một chương trình xem PE được gọi là CFF Explorer của NTCore , có thể cung cấp cho bạn thông tin này. Nó có thể được tải xuống và chạy dưới dạng di động, nhưng bạn cũng có thể cài đặt nó, nếu bạn muốn.

Nhấp chuột phải vào tệp nhị phân ( .exe, .dllv.v.) và chọn "Mở bằng CFF Explorer". Chuyển đến Tiêu đề Nt -> Tiêu đề tệp -> Trên trường "Đặc điểm", nhấp vào "Nhấp vào đây"

Nếu đó là chương trình 32 bit, hộp kiểm "Máy từ 32 bit" sẽ được chọn. Chẳng hạn, tôi đã cài đặt phiên bản 32 bit của Notepad ++ như bạn có thể thấy trong hình bên dưới. Nếu không, nó là 64 bit.

nhập mô tả hình ảnh ở đây


Có một cách nhanh hơn với trình thám hiểm CFF: ngay lập tức khi tải tệp, trong "loại tệp", bạn có "Portable Executable 64" hoặc "Portable Executable 32"
Arthur.V

0
  • chạy ứng dụng
  • mở Trình quản lý tác vụ
  • nhấp chuột phải và tạo tập tin kết xuất
  • ghi chú đường dẫn
  • đi đến đường dẫn và mở .DMPdump trong Visual Studio
  • ở đó bạn có được tất cả các chi tiết
  • kiểm tra kiến ​​trúc quá trình:

3
Tôi cảm thấy bắt buộc phải nhấn mạnh thực tế rằng câu trả lời này yêu cầu chạy ứng dụng. Các bình luận trước đây cho rằng điều này có thể là không mong muốn. Ngoài ra, Visual Studio sẽ không tự động khả dụng trên tất cả các nền tảng Windows.
G-Man

0

hai xu của tôi: với tư cách là nhà phát triển C ++, walker walker ( http://www.dependencywalker.com/ ) rất nhiều thông tin, không chỉ hiển thị 64/32 bit, mà còn mọi DLL liên quan: nhập mô tả hình ảnh ở đây

Bạn có thể thấy 64 ở bên trái của mỗi tên tệp ...


1
Ảnh chụp màn hình không hiển thị câu trả lời - Thông tin 32 bit so với 64 bit ...
TomEus

0

Tuy nhiên, lệnh của WSLfile hoạt động rất nhiều.

file /mnt/c/p/bin/rg.exe sẽ xuất ra:

/mnt/c/p/bin/rg.exe: PE32+ executable (console) x86-64, for MS Windows

file /mnt/c/p/bin/u.exe sẽ xuất ra:

/mnt/c/p/bin/u.exe: PE32 executable (GUI) Intel 80386, for MS Windows, UPX compressed

0

Cột nền tảng trong trình quản lý tác vụ của windows 10

Windows 7 không có cột nền tảng. Vì vậy, trình quản lý tác vụ Windows 7 sẽ không hiển thị nó.

Trong windows 10, việc chọn các cột không nằm dưới 'view' nữa. Trong Windows 10, khi trong tab chi tiết, bạn nhấp chuột phải vào tiêu đề cột rồi 'chọn cột'. Sau đó chọn hộp cho 'nền tảng'.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.