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?
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.
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...
>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...
Sorry aber der Titel hat mich so durcheinander gebracht. Nach dem dritten lesen habe ich jetzt auch verstanden was gemeint war.
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 | }
|
>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...
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.
@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.
>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 ;-)
:-) 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
Wie gesagt, im Nu erledigt mit dem Hexeditor hier, ist Freeware: http://www.handshake.de/user/chmaas/delphi/download/xvi32.zip
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.