MASM (einsteiger) Problem
-
ich wollte ein simples programm ausprobieren mit folgenden code
.386 .model flat,stdcall option casemap:none include \masm32\include\masm32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\masm32.lib .data szText db 72,97,108,108,111,0 .code start: push offset szText call StdOut end start
das sollte mir einfach Hallo in der konsole ausgeben ... leider ist dem nicht so wen ich das programm ausführe sagt windows das die anwendung ein problem festgestellt hat und beendet werden mus ... was mache ich falsch ? ich habe herausgefunden das der denn fehler nur spuckt wen ich im data segment versuche etwas in den speicher zu schreiben ... übringens ich hab auch mit
szText db "Hallo",0
probiert
-
Dein Programm läuft nach dem Aufruf von SdtOut in eine nicht definierten Bereich -> ExitProcess.
-
Mit "end start" teilst Du dem Assembler/Linker nur mit, wo der Startpunkt des Programms ist. Beenden musst Du es selbst:
xor eax, eax ; Returncode (0: alles in Ordnung) ret ; Programmende
So machen es die meisten Compiler. Man kann aber auch übervorsichtig sein:
invoke ExitProcess, 0
viele grüße
ralph
-
Oh danke stimt das erklärt die test.exe die nichtmehr verschwinden will
edit: Jetzt läuft das ohne fehler aber es erzeugt keine ausgabe
-
TomHalo schrieb:
Oh danke stimt das erklärt die test.exe die nichtmehr verschwinden will
edit: Jetzt läuft das ohne fehler aber es erzeugt keine ausgabe
Da die Ausgabe auf der Console stattfindet, musst Du ein Konsolenprogramm erstellen:
ml.exe /coff test.asm /link /SUBSYSTEM:CONSOLE
und das Ganze in einer Konsole ("Eingabeaufforderung") ablaufen lassen.
viele grüße
ralphEdit: Im Quick Editor vom MASM32-Paket (qedit.exe) nimmst Du nicht die Option "Assemble&Link", sondern "Console Assemble&Link".
-
was macht der assembler den dann für unterschiede ?
-
TomHalo schrieb:
was macht der assembler den dann für unterschiede ?
gar keine, da dies nur den Linker betrifft, der einen entsprechenden Vermerk im PE Header deine EXE macht. Ein Konsolen-Programm ist ein eine gewöhnliches GUI Programm, bei dem automatisch eine Konsole geöffnet wir, bevor der eigentliche Code aufgerufen wird. (sieh auch AllocConsole())
-
Ok Danke damit haben sich meine fragen erledigt