Fichiers binaires expliqués : comment ouvrir et utiliser

Table des Matières

Binary file

Qu'est-ce qu'un fichier binaire ?

Un fichier binaire est un fichier informatique qui est différent d’un fichier texte. Il peut contenir des données, comme un programme informatique, ou il peut s’agir d’un fichier qui stocke des données pour qu’un programme les utilise. En général, il s’agit d’un code machine, compilé par le langage d’assemblage.

comment ouvrir un fichier binaire ?

Il existe plusieurs façons différentes d’ouvrir un fichier binaire. La méthode courante consiste à utiliser l’éditeur binaire : C++ ou la fonction API Windows.

1. Éditeur de fichiers .bin : Programm C++

Pour ouvrir un fichier binaire avec C++, vous devez utiliser la classe ifstream, qui fait partie de la bibliothèque standard C++. Pour utiliser cette méthode, vous devez d’abord inclure le fichier d’en-tête fstream. Ensuite, vous pouvez ouvrir un fichier binaire en utilisant la fonction membre ifstream::open(), en passant le nom ou le chemin du fichier en tant que paramètre. Par exemple :

1.1 Ouvrir un fichier bin

				
					/// C++ open bin file
void getBinSize(std::string path)
{
int size = 0;
std::ifstream infile(path, std::ifstream::binary);

infile.seekg(0, infile.end);
int size= infile.tellg();
infile.seekg(0, infile.beg);

infile.close();
printf("\npath=%s,size=%d \n", path, size);
return size;
}

void readBin(std::string path, char *buf, int size)
{
std::ifstream infile(path, std::ifstream::binary);

infile.read(static_cast<char *>(buf), size);
infile.close();
}
				
			

1.2 Enregistrer un fichier Bin

				
					/// C++ save bin file
void writeBin ( std::string path , char * buf , int size )
{ std::ofstream outfile ( path , std::ifstream::binary );

outfile.write((char *)(buf), size);

outfile.close();
}
				
			

1.3 Lire un fichier Bin

				
					// read binFile
std::string filePath= "./demo.bin";
int size = GetBinSize(filePath);
char *buf= new char[size];
readBin(filePath, buf, size);
float *fbuf = reinterpret_cast<float *>(buf);

// write binFile
std::string saveFilePath= "./demo_saved.bin";
writeBin(saveFilePath, buf, size);

delete buf;
				
			

2. Fonction API Windows CreateFile()

Une autre façon d’ouvrir un fichier binaire est d’utiliser la fonction de l’API Windows CreateFile(). Cette fonction fait partie de l’API Windows, qui ne fait pas partie de la bibliothèque standard C++. Cependant, vous pouvez l’utiliser dans vos programmes C++ en incluant le fichier d’en-tête Windows.h. La fonction CreateFile() prend une variété de paramètres, mais les plus importants pour ouvrir un fichier binaire sont le nom de fichier ou le chemin, l’accès souhaité (par exemple, GENERIC_READ pour la lecture ou GENERIC_WRITE pour l’écriture) et le mode de partage (par exemple, FILE_SHARE_READ pour permettre à d’autres processus de lire le fichier pendant que votre processus l’a ouvert). Par exemple :

				
					#include Windows.h>

int main()
{
HANDLE file = CreateFile("example.bin", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
// ...
}
				
			

Erreur de fichier binaire : "impossible d'exécuter le fichier binaire erreur de format exec"

L’erreur « impossible d’exécuter le fichier binaire : erreur de format Exec » se produit généralement lorsque vous essayez d’exécuter un fichier binaire qui n’est pas compatible avec l’architecture de votre système. Voici un cas pour montrer comment résoudre ce problème.

Voici le code du programme que j’ai compilé avec un compilateur croisé :

				
					#include <stdio.h>
void main()
{
   printf("hello arm");
}
				
			

Compiler sur PC :

				
					# arm-linux-gnueabi-gcc -o main main.c
				
			

Message d’erreur lors de l’exécution sur PC :

				
					root@ubuntu:/home/jinxin/app# ./main
bash: ./main: cannot execute binary file: Exec format error
				
			

Le PC actuel est de l’architecture x86, et le fichier binaire vient de être compilé au format arm :

				
					root@ubuntu:/home/jinxin/app# file main
root@ubuntu:/home/jinxin/app# file main
main: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ec9b455a1c1df94060c7364d0efc42975207fca9, not stripped
				
			

Solution de l'erreur de format EXEC

Pour résoudre ce problème, nous avons plusieurs options :

Exécuter le fichier binaire sur un appareil basé sur ARM : si vous avez accès à un appareil basé sur ARM, vous pouvez copier le fichier binaire sur cet appareil et l’exécuter là-bas.

Compiler le code en croisant pour l’architecture x86 : vous pouvez utiliser un compilateur croisé x86 pour compiler le code pour l’architecture x86. Pour ce faire, vous devez installer un compilateur croisé x86 sur votre PC et compiler le code avec celui-ci.

Utiliser un émulateur : vous pouvez utiliser un émulateur tel que QEMU pour émuler un appareil basé sur ARM sur votre PC basé sur x86 et exécuter le fichier binaire sur l’émulateur.

Utiliser une machine virtuelle : vous pouvez utiliser une machine virtuelle pour émuler un appareil basé sur ARM sur votre PC basé sur x86 et exécuter le fichier binaire sur la machine virtuelle.

Dans l’ensemble, la meilleure solution dépend de votre cas d’utilisation spécifique et des ressources disponibles.

Abonnez-vous

Rejoignez notre liste d’abonnés pour obtenir mensuel blog des mises à jour, des nouvelles technologies, des études de cas. Nous n’enverrons jamais de spam, et vous pouvez vous désinscrire à tout moment.

À Propos De L'Auteur

Picture of Aidan Taylor
Aidan Taylor

I am Aidan Taylor and I have over 10 years of experience in the field of PCB Reverse Engineering, PCB design and IC Unlock.

Besoin D'Aide?

Retour en haut

Instant Quote