Moin Moin,
ich finde mich gerade etwas in Assembler ein und habe im Internet einen sehr kleinen und einfachen Assembler-Code gefunden, der bereits alles "vor eingestellt" hat, quasi keine Verlinkungen durch einen Linker mehr braucht, sondern nur noch kompiliert, also von der Assemblersprache in den Zahlencode übersetzt werden muss. Dazu nutze ich nasm und es funktioniert prima. Das kleine Programm stellt eine ganz einfache MessageBox dar.
Was ich mich aber frage ist, warum der Stack Pointer (also das Register rsp) um 0x28 subtrahiert werden muss. Lasse ich die Zeile
Hier mal der ganze Code:
Bei der Gelegenheit würde ich auch noch mal eine zweite Frage stellen: Warum braucht ein Prozess einen Aufruf der Funktion "ExitProcess()"? Ich vermute, dass das Betriebssystem die Info braucht, wann das Programm beendet ist.
Vielen Dank vorab für die Hilfe!
ich finde mich gerade etwas in Assembler ein und habe im Internet einen sehr kleinen und einfachen Assembler-Code gefunden, der bereits alles "vor eingestellt" hat, quasi keine Verlinkungen durch einen Linker mehr braucht, sondern nur noch kompiliert, also von der Assemblersprache in den Zahlencode übersetzt werden muss. Dazu nutze ich nasm und es funktioniert prima. Das kleine Programm stellt eine ganz einfache MessageBox dar.
Was ich mich aber frage ist, warum der Stack Pointer (also das Register rsp) um 0x28 subtrahiert werden muss. Lasse ich die Zeile
sub rsp, 5 * 8
weg, kann ich im Task-Manager sehen, dass mein kleines Programm mit einem Fehler startet (diese Windows-Fehlerdiagnose öffnet sich, was nur im Task-Manager sichtbar ist).Hier mal der ganze Code:
Quellcode
- EntryPoint:
- sub rsp, 5 * 8 ; 48 83 EC 28 ; Um diese Zeile geht es
- mov r9d, 0 ; 41 B9 00
- mov r8d, Title_ + DATADELTA ; 41 B8 00 30 40
- mov edx, Caption + DATADELTA ; BA 0D 30 40 00
- mov ecx, 0 ; B9 00
- call [__imp__MessageBoxA] ; 00 FF 14 25 88 20 40
- exit:
- mov ecx, 0 ; B9 00
- call [__imp__ExitProcess] ; 00 FF 14 25 78 20 40
Bei der Gelegenheit würde ich auch noch mal eine zweite Frage stellen: Warum braucht ein Prozess einen Aufruf der Funktion "ExitProcess()"? Ich vermute, dass das Betriebssystem die Info braucht, wann das Programm beendet ist.
Vielen Dank vorab für die Hilfe!