Existe uma ferramenta de linha de comando para verificar 32 bits ou 64 bits de um exe?

5

No Windows, como:

is64 abc.exe  
1  

e

is32 def.exe  
1  

Enquanto o abc.exe é compilado de 64 bits e o def.exe é de 32 bits no Windows.

kissson
fonte
Não que eu saiba, mas criar um utilitário que lê o cabeçalho PE de um binário não deve ser extremamente difícil. Estudar o formato PE agora, responderá se eu descobrir.
'Kay, descobri e respondi com um pacote de ferramentas de linha de comando fazendo o que você pediu. Eu acho que.

Respostas:

6

Existe uma ferramenta de linha de comando para verificar 32 bits ou 64 bits de um exe?

sim

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

O formato PE32 significa Portable Executable 32-bit, enquanto o PE32 + é o formato Portable Executable 64-bit.

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

gostar:

is64 abc.exe
1

Não é exatamente assim.

Você pode usar o -b opção para excluir o nome do arquivo da saída, então você só precisa de algum kung fu de linha de comando para extrair a primeira palavra (PE32 ou PE32 +) compará-lo com PE32 + e usá-lo em sua declaração "f".


Windows 10

No Windows 10, se você tiver a atualização de aniversário, se ativar o shell bash , você pode abrir um shell bash e usar o file comando assim

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

ou

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

Eu escrevi um par de programas estritamente fazendo o que você pediu (com a adição de mensagens de erro em erros et cetera.) (E, na verdade, é um programa com uma definição que altera seu comportamento para ser perfeitamente preciso, mas isso não importa.)

Você pode encontrá-los no meu Dropbox, Aqui . O código fonte está incluído no pacote, mas você pode descartá-lo se for desnecessário. É basicamente apenas incluído no caso de você não confiar em meus binários.

Exemplo de uso :

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

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

Basicamente, o programa trabalha primeiro mapeando a memória do binário, depois localizando o cabeçalho do PE e, finalmente, simplesmente comparando o campo Machine com o valor para qualquer arquitetura que você peça. Essencialmente, um processo muito simples.


fonte
1
Embora o arquivo seja provavelmente a melhor solução, o +1 é porque esse tipo de ajuda deve ser recompensado.
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 - & gt; Executável Portátil

York Tsai
fonte
Lembre-se de formatar corretamente sua resposta. Use um suporte de ângulo reto > antes de cada linha de uma cota de bloco e blocos de código de recuo com quatro espaços.
bwDraco