Ausgabe von MinGW
-
Hi!
Ich bin zur Zeit dabei ein bisschen Assembler, sowohl unter Linux als auch Win32 zu lernen.Jetzt hab ich mal ein kleines HelloWorld C-Programm geschrieben:
#include <stdio.h> int main() { printf("Hallo\n"); return 0; }
... und es mit gcc -S compiliert.
Nun habe ich Probleme, den Output zu verstehen den mit MinGW liefert:.file "test.c" .def ___main; .scl 2; .type 32; .endef .section .rdata,"dr" LC0: .ascii "Hallo\0" .text .globl _main .def _main; .scl 2; .type 32; .endef _main: pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $0, %eax addl $15, %eax addl $15, %eax shrl $4, %eax sall $4, %eax movl %eax, -4(%ebp) movl -4(%ebp), %eax call __alloca call ___main movl $LC0, (%esp) call _printf movl $0, %eax leave ret .def _printf; .scl 2; .type 32; .endef
Warum ist dieses Grundgerüst(im gegensatz zu der gcc Version mit Linux) so kompliziert?
Warum gibt es 2 main-funktionen?
Was soll dieses .def?
Was passiert da bevor in _main __alloca und ___main aufgerufen wird?
Warum überhaupt _alloca?Wäre nett wenn ihr mir ein paar meiner fragen beantworten könntet.
-
.file "debugtest.c" .section .rdata,"dr" LC0: .ascii "Hallo du da\12\0" .text .globl _WinMain@16 _WinMain@16: pushl %ebp movl %esp, %ebp subl $8, %esp movl $LC0, (%esp) call _printf movl $0, %eax leave ret $16
Das ganze wird aufgerufen wenn ich WinMain(...) statt main() benutze.
Warum fehlen hier die sachen sie im anderen Code ca. zeile 13-18 stehen?