Forum: Compiler & IDEs Binärdatei in C-Quelltext umwandeln


von Cfr (Gast)


Lesenswert?

Kennt jemand ein Tool, welches eine Binärdatei in C-Quelltext umwandelt,
z.B. in:

char bin_datei[] = { // Binärdatei-Inhalt
  0x69,0x00,0x00,0x1F,0xEF,0x15,0x3F,0xC90,
  0x0F,0x63,0x36,0x99,0x1A,0xAF,0xEB,0x55,
  u.s.w.
};

Konnte nur ein BINTOC finden, weiß aber nicht wie das funktionieren 
soll, ist keine .exe dabei?

von Peter (Gast)


Lesenswert?

1. Also estmal ist jede Datei eine Binärdatei, sie besteht immer aus 
bytes mit bits.

2. Es ist nicht möglich aus einem compilat zum Quelltext 
zurückzuwandeln.

von P. S. (Gast)


Lesenswert?

Peter wrote:
> 1. Also estmal ist jede Datei eine Binärdatei, sie besteht immer aus
> bytes mit bits.

Erst Klugscheissern...

> 2. Es ist nicht möglich aus einem compilat zum Quelltext
> zurückzuwandeln.

...und dann solchen Stuss verzapfen.

Lesen, denken, posten. Und zwar den ganzen Post, nicht nur den Titel.

P.S: Das ist eigentlich schneller selbst geschrieben, als gefragt...

von Cfr (Gast)


Lesenswert?

>1. Also estmal ist jede Datei eine Binärdatei, sie besteht immer aus
>bytes mit bits.
>
>2. Es ist nicht möglich aus einem compilat zum Quelltext
>zurückzuwandeln.

völlig klar, Du hast die Frage wahrscheinlich nicht verstanden:

Ich will nur den Inhalt (Bytes 1:1) in meinen C-Quelltext einbinden, so 
wie im BSP. angegeben als Deklaration, zur Weiterverarbeitung. Damit 
will ich mir nur viel Fleißarbeit ersparen.

Zur Not muß ich es selber schreiben, aber sowas gibts bestimmt schon...

von Peter (Gast)


Lesenswert?

Sorry aber der Titel hat mich so durcheinander gebracht. Nach dem 
dritten lesen habe ich jetzt auch verstanden was gemeint war.

von P. S. (Gast)


Lesenswert?

1
#include <stdio.h>
2
3
int main( void)
4
{
5
  int Byte;
6
7
  while(( Byte = getchar()) != EOF)
8
  {
9
    printf( "0x%02x, ", ( char) Byte);
10
  }
11
12
  return( 0);
13
}

von Stefan Salewski (Gast)


Lesenswert?

>Sorry aber der Titel hat mich so durcheinander gebracht.

Ich dachte auch sofort an Hackfleisch -> Kuh.

Wer ein Unix-artiges Betriebssystem zur Verfügung hat würde wohl einfach 
die Ausgabe vom Programm Hexdump in eine Datei umleiten...

von Mr. U. (nomis3000)


Lesenswert?

Schreibs dir selbst. Bis zur ersten brauchbaren Antwort hat es 19minuten 
gebraucht. Bis dorthin hättest du es schon längst selbst schreiben 
können.

Such dir nen C/C++ Compiler für den PC. Danach liest du dich einfach in 
die Funktionen für das Öffnen, Schreiben und Lesen von Dateien ein. Der 
Rest sollte kein Problem Sein.

von MWS (Gast)


Lesenswert?

@Peter,

würd' ich mir nix draus machen, ich hab's genauso verstanden, der OP hat 
die Überschrift missverständlich geschrieben, das ist kein Quelltext, 
das sind einfach Hex-Werte.

Bei mir ging's in 20 Sekunden, länger als ich hier schreibe:

XVI32 Hexeditor ---> Block markieren ---> File, Clipboard, Copy as Hex 
String ---> Copy und Paste in Wordpad ---> Suchen/Ersetzen alle 
Leerzeichen durch ",0x" ersetzen. Dann liegts passend vor und kann 
eingefügt werden.

von Cfr (Gast)


Lesenswert?

>Schreibs dir selbst. Bis zur ersten brauchbaren Antwort hat es 19minuten
>gebraucht. Bis dorthin hättest du es schon längst selbst schreiben
>können.
>
>Such dir nen C/C++ Compiler für den PC. Danach liest du dich einfach in
>die Funktionen für das Öffnen, Schreiben und Lesen von Dateien ein. Der
>Rest sollte kein Problem Sein.

Sicher, aber ich dachte sowas wird hier öfters mal gebraucht und wäre 
schnell Nachnutzbar. Ich müsste mich in der Tat erst mal mit 
Dateifunktionen beschäftigen, kommt bei µC-Programmierung in C nicht so 
oft vor ;-)

von Sebastian B. (mircobolle)


Lesenswert?

:-)

Ja, der Titel ist nicht so glücklich gewählt:
"Binärdatei in C-Quelltext umwandeln"

sowas wär wahrscheinlich verständlicher:
"Binärdatei in C-Quelltext als Byte Array einbinden"


So ein Tool wäre ab und zu wirklich sehr hilfreich.

Ansonsten wie schon geschrieben selber eine kleine Konsolenanwendung 
schreiben...

Parameter: Binär-File [Eingabedatei] C_Struct_Datei[Ausgabedatei]

dann jedes byte bis EOF einlesen und 0x vorne dranhängen, schön in einem 
byte struct formatieren, am ende alle bytes aufzählen und ein define für 
Array_Max einfügen...

ah, und nicht zu vergessen das Tool bitte hier posten ;-)

MFG

von MWS (Gast)


Lesenswert?

Wie gesagt, im Nu erledigt mit dem Hexeditor hier, ist Freeware:

http://www.handshake.de/user/chmaas/delphi/download/xvi32.zip

von Gast (Gast)


Lesenswert?

Hallo,

suche mal in der Codesammlung nach "Bin2Hex"

MfG

von Cfr (Gast)


Lesenswert?

@MWS
>Wie gesagt, im Nu erledigt mit dem Hexeditor hier, ist Freeware:

ja, so gehts schon recht gut, noch paar Umbrüche rein und fertig,
danke für den Tipp.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> suche mal in der Codesammlung nach "Bin2Hex"
Findest du den Beitrag "Bin2Hex für MP3,GIF usw."

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Eigentlich muss man das doch nicht als C-Array austexten.

Die hex-Datei foo.hex könnte man umwandeln in ein reines Binärfile:
1
objcopy -I ihex foo.hex -O binary foo.bin

Das foo.bin ist dann eine nackte Binärdatei, ohne Prüfsumme etc.

Dieses Binärfile wandelt man dann in ein Object-File. Da man das 
BFD-Target wissen muss, hier mal explizit für eine AVR-Toolchain 
(Object-Formal ist elf32-avr) und Architektur avr4 (zB ATmega8). Für 
einen ARM oder was auch immer muss man dann die Tools (xxx-objcopy, 
xxx-nm, ...) und Angaben anpassen:
1
avr-objcopy -I binary foo.bin --binary-architecture avr4 -O elf32-avr foo.o

Das foo.o kann man direkt ins Projekt dazulinken, es hat das gleiche 
Format wie im Compilier-Vorgang erstllte o-Files (elf32-avr). Die Option 
--binary-architekture bewirkt u.a., daß ein paar Symbole definiert 
werden, die Auskunft über das Objekt geben, und über die es vom C aus 
angesprochen werden kann:
1
$ nm foo.o
2
000027c6 D _binary_foo_bin_end
3
000027c6 A _binary_foo_bin_size
4
00000000 D _binary_foo_bin_start

Was nun noch fehlt, sind die Deklarationen in der C-Quelle. Wenn das 
Zeug als unsigned char angesprochen werden soll:
1
extern unsigned char _binary_foo_bin_start[];


Johann

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.