Was ist eine Binärdatei?
Eine Binärdatei ist eine Computerdatei, die sich von einer Textdatei unterscheidet. Sie kann Daten enthalten, wie beispielsweise ein Computerprogramm, oder es kann sich um eine Datei handeln, in der Daten für ein Programm gespeichert sind. Im Allgemeinen handelt es sich um einen Maschinencode, der durch die Assemblersprache kompiliert wurde.
Wie öffnet man eine Binärdatei?
Es gibt verschiedene Möglichkeiten, eine Binärdatei zu öffnen. Die gängigste Methode ist die Verwendung des Binär-Editors: C++ oder Windows-API-Funktion.
1.bin file Editor: C++ Programm
Um eine Binärdatei mit C++ zu öffnen, müssen Sie die Klasse ifstream verwenden, die Teil der Standard-C++-Bibliothek ist. Um diese Methode zu verwenden, müssen Sie zunächst die Header-Datei fstream einbinden. Anschließend können Sie eine Binärdatei mit der Member-Funktion ifstream::open() öffnen, indem Sie den Namen oder Pfad der Datei als Parameter übergeben. Beispiel:
1.1 Bin-Datei öffnen
/// 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(buf), size);
infile.close();
}
1.2 Bin-Datei speichern
/// 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 Bin-Datei lesen
// read binFile
std::string filePath= "./demo.bin";
int size = GetBinSize(filePath);
char *buf= new char[size];
readBin(filePath, buf, size);
float *fbuf = reinterpret_cast(buf);
// write binFile
std::string saveFilePath= "./demo_saved.bin";
writeBin(saveFilePath, buf, size);
delete buf;
2. Windows-API-Funktion CreateFile()
Eine weitere Möglichkeit, eine Binärdatei zu öffnen, ist die Verwendung der Windows-API-Funktion CreateFile(). Diese Funktion ist Teil der Windows-API, die nicht zur C++-Standardbibliothek gehört. Sie können sie jedoch in Ihren C++-Programmen verwenden, indem Sie die Header-Datei Windows.h einbinden. Die Funktion CreateFile() akzeptiert eine Vielzahl von Parametern, aber die wichtigsten für das Öffnen einer Binärdatei sind der Dateiname oder Pfad, der gewünschte Zugriff (z. B. GENERIC_READ zum Lesen oder GENERIC_WRITE zum Schreiben) und der Freigabemodus (z. B. FILE_SHARE_READ, damit andere Prozesse die Datei lesen können, während Ihr Prozess sie geöffnet hat). Beispiel:
#include Windows.h>
int main()
{
HANDLE file = CreateFile("example.bin", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
// ...
}
Binärdateifehler: „Binärdatei kann nicht ausgeführt werden – Exec-Formatfehler“
Der Fehler „Binärdatei kann nicht ausgeführt werden: Exec-Formatfehler“ tritt in der Regel auf, wenn Sie versuchen, eine Binärdatei auszuführen, die nicht mit der Architektur Ihres Systems kompatibel ist. Hier ist ein Beispiel, das zeigt, wie Sie dieses Problem lösen können.
Das Folgende ist der Programmcode, den ich mit einem Cross-Compiler kompiliert habe:
#include
void main()
{
printf("hello arm");
}
Auf dem PC kompilieren:
# arm-linux-gnueabi-gcc -o main main.c
Fehlermeldung beim Ausführen auf dem PC:
root@ubuntu:/home/jinxin/app# ./main
bash: ./main: cannot execute binary file: Exec format error
Der aktuelle PC hat eine x86-Architektur, und die gerade kompilierte Binärdatei ist im ARM-Format:
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
Lösung für EXEC-Formatfehler
Um dieses Problem zu lösen, haben wir mehrere Möglichkeiten:
Führen Sie die Binärdatei auf einem ARM-basierten Gerät aus: Wenn Sie Zugriff auf ein ARM-basiertes Gerät haben, können Sie die Binärdatei auf dieses Gerät kopieren und dort ausführen.
Kompilieren Sie den Code für die x86-Architektur: Sie können einen x86-Cross-Compiler verwenden, um den Code für die x86-Architektur zu kompilieren. Dazu müssen Sie einen x86-Cross-Compiler auf Ihrem PC installieren und den Code damit kompilieren.
Verwenden Sie einen Emulator: Sie können einen Emulator wie QEMU verwenden, um ein ARM-basiertes Gerät auf Ihrem x86-basierten PC zu emulieren und die Binärdatei auf dem Emulator auszuführen.
Verwenden Sie eine virtuelle Maschine: Sie können eine virtuelle Maschine verwenden, um ein ARM-basiertes Gerät auf Ihrem x86-basierten PC zu emulieren und die Binärdatei auf der virtuellen Maschine auszuführen.
Insgesamt hängt die beste Lösung von Ihrem spezifischen Anwendungsfall und den verfügbaren Ressourcen ab.




