Je sais qu'il existe de nombreuses réponses, mais aucune d'entre elles n'est vraiment portable et nécessite une sorte d'outil pour être utilisée. Je voulais résoudre ce problème de manière programmatique pour toutes les plateformes. Cela fonctionnera sur tout ce qui possède un compilateur C.
#include <stdio.h>
#include <fstream> // std::fstream
#include <stdio.h>
#include <string.h>
char Header [0x200];
char Elf32Magic [20] = "\x7f\x45\x4c\x46\01"; //7F 45 4C 46 01 // ELF32
char Elf64Magic [20] = "\x7f\x45\x4c\x46\02"; //7F 45 4C 46 02 // ELF64
char Win32Magic [20] = "\x50\x45\x00\x00\x4C\x01";// PE32
char Win64Magic [20] = "\x50\x45\x00\x00\x64\x86";// PE64
char PeHeader[20] = {};
void CheckWinHeader(){
int k = 0;
for (int i = 0; i < 0x200; i++)
{
if(Header[i] == 0x50 && Header[i+1] == 0x45) // PE
{
for(int j = i; j < i + 6; j++)
{
PeHeader[k] = Header[j];
k++;
//printf("%hhx", Header[j]);
}
}
}
}
int main(){
std::fstream fs;
fs.open ("/home/PATH/TO/YOUR/BINARY", std::fstream::in | std::fstream::out | std::fstream::app);
fs.read( Header , 0x200);
if(memcmp ( Header, Elf32Magic, 5 ) == 0 ){
printf("ELF 32 Match Found ! \n");
}
if(memcmp ( Header, Elf64Magic, 5 ) == 0 ){
printf("Elf 64 Match Found ! \n");
}
CheckWinHeader();
if(memcmp ( &PeHeader, Win32Magic, 6 ) == 0 ){
printf("Win 32 Match Found ! \n");
}
if(memcmp ( &PeHeader, Win64Magic, 6 ) == 0 ){
printf("Win 64 Match Found ! \n");
}
fs.close();
return 0;
}
compiler en utilisant n'importe quel compilateur. J'ai utilisé g++.
g++ Bincheck.cpp -o bincheck
./bincheck
0 votes
Cette question est similaire Cependant, il faut un peu de travail pour le vérifier.
4 votes
@Guillaume : Les images exécutables ne sont pas des processus. Le gestionnaire de tâches n'affiche que les processus.
0 votes
Comment puis-je déterminer si une application que j'installe est 32 ou 64 bits ?
0 votes
C'est bizarre que le clic droit sur le fichier > Propriétés ne donne pas cette information.