Esiste uno strumento da riga di comando per controllare a 32-bit o 64-bit di un exe?


5

Su Windows, come:

is64 abc.exe  
1  

e

is32 def.exe  
1  

Mentre abc.exe è compilato a 64 bit e def.exe è a 32 bit su Windows.



Non che io sappia, ma la creazione di un'utilità che legge l'intestazione PE di un file binario non dovrebbe essere estremamente difficile. Studiare il formato PE in questo momento, risponderà se lo capisco.

'Kay, capito e risposto con un pacchetto di strumenti da riga di comando facendo quello che hai chiesto. Penso.

Risposte:


6

Esiste uno strumento da riga di comando per controllare a 32-bit o 64-bit di un exe?

c:\Program Files (x86)\GnuWin32\bin>file file.exe
file.exe; PE32 executable for MS Windows (console) Intel 80386 32-bit

c:\Program Files (x86)\GnuWin32\bin>cd ..\..\evernote\evernote   
c:\Program Files (x86)\Evernote\Evernote>file evernote.exe
evernote.exe; PE32 executable for MS Windows (GUI) Intel 80386 32-bit

c:\Program Files (x86)\Evernote\Evernote>cd c:\Program Files\Internet Explorer    
c:\Program Files\Internet Explorer>file iexplore.exe
iexplore.exe; PE32+ executable for MS Windows (GUI) Mono/.Net assembly

Il formato PE32 sta per Portable Executable 32-bit, mentre PE32 + è Portable Executable 64-bit.

Vedi http://gnuwin32.sourceforge.net/packages/file.htm

piace:

is64 abc.exe
1

Non esattamente così.

Puoi usare l' -bopzione per escludere il nome del file dall'output, quindi hai solo bisogno di un po 'di kung fu da riga di comando per estrarre la prima parola (PE32 o PE32 +) per confrontarlo con PE32 + e usarlo nella tua dichiarazione "f".


Windows 10

Su Windows 10, se si dispone dell'aggiornamento dell'anniversario, se si abilita la shell bash , è possibile aprire una shell bash e utilizzare il filecomando in questo modo

rgb@MYPCNAME:/mnt/c$ file install.exe
install.exe: PE32 executable (GUI) Intel 80386, for MS Windows

o

rgb@MYPCNAME:/mnt/c/Program Files/Internet Explorer$ file ieinstal.exe
ieinstal.exe: PE32+ executable (GUI) x86-64, for MS Windows

4

Ho scritto un paio di programmi facendo esattamente quello che hai chiesto (Con l'aggiunta di messaggi di errore su errori eccetera.) (E in realtà, è un programma con una definizione che cambia il suo comportamento per essere perfettamente accurato, ma non importa .)

Puoi trovarli sul mio Dropbox, qui . Il codice sorgente è incluso nel pacchetto ma è possibile scartarlo se non è necessario. Fondamentalmente è incluso solo nel caso in cui non ti fidi dei miei binari.

Esempio di utilizzo :

>is32 C:\Windows\System32\taskmgr.exe
1

>is64 C:\Windows\System32\taskmgr.exe
0

Fondamentalmente, il programma funziona dapprima mappando la memoria del binario, quindi individuando l'intestazione PE e infine semplicemente confrontando il campo Macchina con il valore per qualsiasi architettura richiesta. Essenzialmente un processo molto semplice.


1
Mentre il file è probabilmente la soluzione migliore, il +1 è perché questo tipo di aiuto dovrebbe essere premiato.
Ben

1
$  file access-client-win32.exe 

access-client-win32.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit


$ file access-client-win64.exe

access-client-win64.exe: PE32+ executable for MS Windows (console) Mono/.Net assembly

win32.exe -> PE32

win64.exe -> PE32+

ps: PE -> eseguibile portatile


Ricorda di formattare correttamente la tua risposta. Utilizzare una parentesi ad angolo retto >prima di ogni riga di un preventivo di blocco e indentare i blocchi di codice con quattro spazi.
bwDraco,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.