[C] Binär in eine Datei schreiben -> ausführbare .com Datei [ERLEDIGT]

Hi zu allen,
ich möchte mir ein Programm schreiben das eine .com Datei erstellt.
Also, als erstes habe ich eine kleine ASM Datei geschrieben und diese Assembeliert (<- heißt das echt so?):
Code:
; Dies ist ein .asm Datei für den Assembler FASM
ORG 100h
    Start:
    mov cx, 0BB8h
    marke:
    mov ax, 1h
    push ax
    LOOP marke
    int 21h

Danach habe ich die Datei (die .com) mit einem Hexeditor geöffnet und habe folgendes vorgefunden:
Code:
B9B8 0BB8 0100 50E2 FACD 21

Darauffolgend habe ich die Hexzahlen in Binärzehlen umgewandelt (z.B. B9 = 10111001)

Anschließend habe ich ich diesen ANSI C Quellcode verfasst:
Code:
/* Dies ist eine gekürzte Version */

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
	FILE* fp_com;
	char str_array_erstellen[]="1011100110111000000010111011100000000001000000000101000011100010111110101100110100100001";


		fp_com = fopen("test.com", "a+b");
		
		fwrite(&str_array_erstellen, sizeof(str_array_erstellen), 1, fp_com);
		fclose(fp_com);

	return(0);
}

str_array_erstellen stellt dabei den Binärcode da den ich aus dem umgerechneten Hexdump habe.

Wenn ich die test.com jetzt aufrufe kommt ein Fehler (was für ein Fehler das ist ist jetzt nicht von Interesse.)

Also habe ich die Datei mit dem Hexeditor geöffnet. Uns siehe da, die einsen und nullen wurden nicht auf Binärer Ebene in die Datei geschrieben sondern ganz normal wie bei einem a+ ich habe die Datei aber mit a+b geöffnet.
Jetzt frag ich mich was schief gelaufen ist, oder besser gesagt ich frag das jetzt euch.

ich hoffe hier kann/möchte mir jemand helfen. danke im voraus.

MfG _D4rK_
 
Du kannst nur byteweise in eine datei schreiben, und dass hexadezimal:

Code:
/* Dies ist eine gekürzte Version */

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
	FILE* fp_com;
	int code[]=0xB9, 0xB8, 0x0B, 0xB8, 0x01, 0x00, 0x50, 0xE2, 0xFA, 0xCD, 0x21;


		fp_com = fopen("test.com", "a+b");
		
		fwrite(&code, sizeof(code), 1, fp_com);
		fclose(fp_com);

	return(0);
}
 
Du musst schon dem Compiler sagen, dass Du die Ausgabe gerne "Raw" hättest. Z.B Shellcode mäßig
Code:
char str_array_erstellen[]="\xB9\xB8\x0B\xB8\x01\x00\x50\xE2\xFA\xCD\x21";


		fp_com = fopen("test.com", "a+b");

		fwrite(&str_array_erstellen, sizeof(str_array_erstellen)-1, 1, fp_com);
sizeof(str_array_erstellen)-1 = um die terminierende 0 nicht mit in die Datei zu schreiben.
 
Zurück
Oben