Existe uma maneira fácil de verificar se um binário é de 32 ou 64 bits no Windows? Preciso verificar antes de mover o programa para uma máquina de 32 bits e experimentar uma falha espetacular.
windows
binary-files
32-vs-64-bit
Septagrama
fonte
fonte
Respostas:
Depois de examinar os valores dos cabeçalhos da resposta de Richard , criei uma solução que é rápida, fácil e requer apenas um editor de texto. Até o notepad.exe padrão do Windows funcionaria.
Abra o executável no editor de texto. Pode ser necessário arrastar e soltar ou usar a
Open...
caixa de diálogo do editor , porque o Windows não mostra aOpen with...
opção no menu de contexto para executáveis.Verifique os primeiros caracteres imprimíveis após a primeira ocorrência de
PE
. É provável que esta parte esteja cercada por pelo menos algum espaço em branco (pode ser muito), para que possa ser feita facilmente visualmente.Aqui está o que você encontrará:
x86:
x64:
Uma palavra de aviso: o uso do bloco de notas padrão em arquivos grandes pode ser muito lento, por isso é melhor não usá-lo para arquivos maiores que um megabyte ou poucos. No meu caso, demorou cerca de 30 segundos para exibir um arquivo de 12 MiB. O Notepad ++, no entanto, conseguiu exibir um executável de 120 MiB quase instantaneamente.
Essa solução pode ser útil caso você precise inspecionar um arquivo em uma máquina na qual não possa instalar nenhum software adicional.
Informação adicional:
Se você tiver um editor HEX disponível, o deslocamento da assinatura do PE estará localizado no deslocamento
0x3C
. A assinatura éPE\0\0
(letras "P" e "E" seguidas por dois bytes nulos), seguidas por um Tipo de máquina de dois bytes em Little Endian.Os valores relevantes são
0x8664
para executável x64 e0x14c
x86. Existem muito mais valores possíveis, mas você provavelmente nunca encontrará nenhum desses, nem poderá executar esses executáveis no seu PC com Windows.A lista completa de tipos de máquinas, juntamente com o restante das especificações .exe, pode ser encontrada na seção Tipos de Máquinas de Especificação do Microsoft PE e COFF .
fonte
Microsoft PE and COFF Specification
, que é o contrato mais documentado possível, além de instruções sobre como encontrar o endereço exato do cabeçalho do PE em qualquer.exe
arquivo. Se você tem uma fonte mais confiável que a especificação oficial da Microsoft no próprio formato executável da Microsoft, eu adoraria saber o que é isso.A ferramenta SDK
dumpbin.exe
com a/headers
opção inclui essas informações, compare essas duas (adicionei negrito para as informações principais)e
fonte
dumpbin /headers | findstr "machine"
simplifica a apresentação do que o QA está procurando ...C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
Se você não possui ou deseja todo o SDK do Windows ou o Visual Studio, pode usar o
sigcheck.exe
SysInternals :Resultado:
fonte
Posso confirmar que o
file
utilitário (por exemplo, do cygwin) fará a distinção entre executáveis de 32 e 64 bits. Eles aparecem da seguinte maneira:Como você pode ver, é muito óbvio qual é qual. Além disso, ele distingue entre os executáveis do console e da GUI, também óbvio qual é qual.
fonte
MZ
vez dePE
?Um método simples é executá-lo (supondo que você confie nele) e dar uma olhada na guia de processo no gerenciador de tarefas. Os processos de 32 bits exibirão "* 32" no final do nome do processo. Se não for algo que você deseja executar no seu computador, tente o EXE Explorer . Ele mostrará várias informações sobre os executáveis, incluindo 32 ou 64 bits.
fonte
main
ponto de entrada e, portanto, não será executada como um processo autônomo. Há uma função de inicialização chamada quando carregada, mas que não é "principal".Muitas pessoas têm o excelente 7-zip instalado e adicionaram a pasta 7-Zip ao seu
PATH
. O 7-zip compreende outros formatos de arquivo que não ZIP e RAR, como arquivos MSI e executáveis PE. Basta usar a linha de comando7z.exe
no arquivo PE (Exe ou DLL) em questão:A saída incluirá linhas da seguinte forma, com a
CPU
linha lendox86
oux64
, ou seja , o que está sendo solicitado aqui:fonte
file
implementação dentro?A versão de 64 bits do Process Explorer pode lhe dizer. Basta executar o executável e abrir a janela de propriedades do processo. Na guia principal, há uma entrada que diz "Imagem: 32 bits" ou "Imagem: 64 bits".
fonte
Simply run the executable
E se você não quiser executar o programa?Maneira mais simples (quando os dados não são confidenciais)
Acho que o Virustotal
File detail
é a maneira mais simples de descobrir se um binário é de 32 ou 64 bits.A
Additional information
opção fornece, além disso, muitas informações úteis sobre o arquivo.fonte
O método de executar um executável e, em seguida, fazer o check-in no Process Explorer ou ferramenta similar, tem algumas desvantagens óbvias:
O método Dumpbin.exe pode provavelmente resolver o objetivo.
Outra alternativa seria usar o comando file do cygwin . No entanto, eu não testei no Windows. Funciona bem em Linux.
EDIT: Apenas testado file.exe na janela. funciona bem. :)
fonte
cygwin
pacote podem pegar o pacote gnuwin32file
.file
simplesmente lê os dados do disco em formato binário e verifica os números mágicos que os identificam, comparando-os com um banco de dados. Os programas de 32 bits do Windows aparecem como PE32 e os de 64 bits e .NET como PE32 +. O testemunho defile
si mesmo faz absolutamente nenhuma diferença - aplicativos de 32 e 64 bits podem ler dados do disco, o que é tudo o que precisa.Aqui está uma solução Powershell, sem dependências externas ou qualquer coisa. Abra o PowerShell, cole a função lá (pressione Enter duas vezes para retornar ao prompt) e use-a como nos meus exemplos abaixo da função:
Aqui está um exemplo de saída:
fonte
$stream.dispose();
após o fechamento? Deve liberar identificadores de arquivo. ( stackoverflow.com/questions/1999858/… )Mesmo um executável marcado como 32 bits pode ser executado como 64 bits se, por exemplo, for um executável .NET que pode ser executado como 32 ou 64 bits. Para obter mais informações, consulte https://stackoverflow.com/questions/3782191/how-do-i-determine-if-a-net-application-is-32-or-64-bit , que possui uma resposta que diz que o O utilitário CORFLAGS pode ser usado para determinar como um aplicativo .NET será executado.
Saída CORFLAGS.EXE
Para executável de 32 bits:
Para executável de 64 bits:
Para executável que pode ser executado em 32 ou 64 bits e em 64 bits quando possível:
Para executável que pode ser executado em 32 ou 64 bits, mas em 32 bits, a menos que esteja carregado em um processo de 64 bits:
fonte
corflags : error CF008 : The specified file does not have a valid managed header
)você também pode usar a
file
ferramenta no pacote msys do mingw . Funciona como o comando unix. Similar funciona afile
ferramenta do GNUwin32 .fonte
Se você estiver no Windows 7, no Windows Explorer, clique com o botão direito do mouse no executável e selecione Propriedades. Na janela de propriedades, selecione a guia Compatibilidade. Se na seção Modo de compatibilidade você vir o Windows XP, este é um executável de 32 bits. Se você vir o Windows Vista, é de 64 bits.
fonte
Windows 8
Windows XP SP2
mas outros mostram comoVista
ouWindows 8
. Portanto, este método não está correto.Como adicionar o teste de 32/64 bits ao seu menu de contexto
Crie um arquivo de texto chamado exetest.reg e contendo este código:
Crie um arquivo de texto chamado
x86TestStart.bat
contendo apenas essa linha de código e salve-o em C: \ temp:Crie um arquivo de texto chamado
x86or64.vbs
contendo esse código e salve-o em C: \ temp:Clique duas vezes no arquivo exetest.reg: uma nova chave será adicionada no registro do Windows:
Ele aparecerá como " teste de 32/64 bits " no menu de contexto ao clicar com o botão direito do mouse em um arquivo executável.
Clicar no item resultará no início do arquivo em lote
c:\\temp\\x86TestStart.bat\
, que inicia o arquivo VBscriptx86or64.vbs
, que lê a assinatura exe e mostra o resultado.Se você não pode ou não deseja adulterar o registro, basta copiar o arquivo .vbs na barra QuickLaunch e arrastar o executável sobre ele.
fonte
Meus dois centavos serão apenas baixar o walker de dependência e verificar o que a arquitetura foi usada em um dos arquivos executáveis.
Como usá-lo:
Simplesmente faça o download do aplicativo, inicie-o, clique no ícone aberto → encontre um arquivo * .exe → selecione e, na parte inferior, após a verificação da reflexão, você verá uma grade com dados em que uma coluna possui detalhes de "arquitetura" (x86, x64)
Abra o executável e veja a arquitetura de compilação
fonte
Eu não vi isso mencionado. Existe um programa visualizador de PE chamado CFF Explorer da NTCore , que pode fornecer essas informações. Ele pode ser baixado e executado como portátil, mas você também pode instalá-lo, se desejar.
Clique com o botão direito do mouse no binário (
.exe
,.dll
etc.) e selecione "Abrir com o CFF Explorer". Vá para Nt Headers -> File Header -> No campo "Características", clique em "Clique aqui"Se for um programa de 32 bits, a caixa de seleção "máquina de palavras de 32 bits" será marcada. Por exemplo, eu instalei a versão de 32 bits do Notepad ++, como você pode ver na imagem abaixo. Caso contrário, é de 64 bits.
fonte
.DMP
despejo no Visual Studiofonte
meus dois centavos: como desenvolvedor de C ++, o dependency walker ( http://www.dependencywalker.com/ ) é muito informativo, não apenas exibe 64/32 bits, mas também todas as DLLs envolvidas:
Você pode ver 64 à esquerda de cada nome de arquivo ...
fonte
No entanto, WSL 's
file
comando funciona muito.file /mnt/c/p/bin/rg.exe
produziria:file /mnt/c/p/bin/u.exe
produziria:fonte
A coluna da plataforma no gerenciador de tarefas do windows 10
O Windows 7 não possui uma coluna de plataforma. Portanto, o gerenciador de tarefas do Windows 7 não mostrará isso.
No Windows 10, a escolha de colunas não está mais em 'visualização'. No Windows 10, quando na guia detalhes, clique com o botão direito do mouse no cabeçalho da coluna e depois em 'selecionar colunas'. Em seguida, marque a caixa para 'plataforma'.
fonte