MingW und Antivirenprogramme...



  • sehr seltsam... schrieb:

    an was erkennen antivirenprogramme eigentlich viren?

    Zuerst wird mit der Datenbank abgeglichen und dann können Anti-Viren-Programme
    an dem "Inhalt" der Datei erkennen ob es sich um einen Virus handelt, also die heuristische Suche. Dabei wird nach Algorythmen gesucht, die für Viren bekannt sind. Deswegen lassen sich auch Polymorphe Viren schlecht finden, weil sie ihren Quellcode häufig selbst ändern. 👎

    0x0ERROR



  • sehr seltsam... schrieb:

    die oben erstellte hello-world-datei hat ca 46,9 Kb, das finde ich für so ein einfaches hello-world programm ziemlich viel.

    Das Programm hat mit normalem gcc unter Linux 6,8 Kb (ohne Optimierungen).



  • Wenn dir die mit dem gcc erstellten Programme zu gross sind, teste für C den TinyCC 😉



  • ja warum sind die so groß? ich mein, diese größe wird bestimmt nicht durch irgendeinen "overhead" oder null-padding-bytes ausgelöst, oder?


  • Administrator

    sehr seltsam... schrieb:

    ja warum sind die so groß? ich mein, diese größe wird bestimmt nicht durch irgendeinen "overhead" oder null-padding-bytes ausgelöst, oder?

    Wie linkst du die Standardbibliothek? Statisch oder dynamisch?

    sehr seltsam... schrieb:

    ich denk mal, dass so ein antivirenprogramm als allererstes einen hash von der zu prüfenden datei erstellt und diesen in einer datenbank abgleicht.

    Ja. Aber viele unterstützen eben noch eine Heuristik. Und bei gewissen Antivirus Programmen ist dieser Algorithmus nicht gerade gut implementiert, wodurch es viele Falsch-Positive gibt.

    Wieso diese Antiviren Programme nun so ein einfaches "Hello World" als Virus erkennen, hängt eben von diesem Algorithmus ab. Heisst man müsste die genauen Implementationen sehen, sonst kann man nur wild mutmassen.

    Grüssli



  • Geh doch mal mit einem Debugger im Einzelschritt-Modus durch das "Hallo-Welt"-Programm. Dann muesstest du doch sehen, was fuer ein Code dort ausgefuehrt wird.



  • Dravere schrieb:

    sehr seltsam... schrieb:

    ja warum sind die so groß? ich mein, diese größe wird bestimmt nicht durch irgendeinen "overhead" oder null-padding-bytes ausgelöst, oder?

    Wie linkst du die Standardbibliothek? Statisch oder dynamisch?

    ehrlich gesagt... keine ahnung.

    ich hab das programm mit
    gcc helloworld.c -o helloworld.exe
    kompiliert.

    da das programm allerdings so groß ist, nehme ich stark an, dass ich sie statisch gelinkt hab?



  • gigg schrieb:

    Geh doch mal mit einem Debugger im Einzelschritt-Modus durch das "Hallo-Welt"-Programm. Dann muesstest du doch sehen, was fuer ein Code dort ausgefuehrt wird.

    ok, sobald ich versteh, wie man mit gdb arbeitet mach ich das.
    ich hab jetzt:
    gcc helloworld.c -o helloworld.exe -g
    gemacht. so hab ich alle symbols in der exe.

    aber hier zuerstmal der assemblercode vom compiler:

    .file	"helloworld.c"
    	.def	___main;	.scl	2;	.type	32;	.endef
    	.section .rdata,"dr"
    LC0:
    	.ascii "Hello World!\0"
    	.text
    	.globl	_main
    	.def	_main;	.scl	2;	.type	32;	.endef
    _main:
    LFB6:
    	.cfi_startproc
    	pushl	%ebp
    	.cfi_def_cfa_offset 8
    	.cfi_offset 5, -8
    	movl	%esp, %ebp
    	.cfi_def_cfa_register 5
    	andl	$-16, %esp
    	subl	$16, %esp
    	call	___main
    	movl	$LC0, (%esp)
    	call	_puts
    	movl	$0, %eax
    	leave
    	.cfi_restore 5
    	.cfi_def_cfa 4, 4
    	ret
    	.cfi_endproc
    LFE6:
    	.def	_puts;	.scl	2;	.type	32;	.endef
    


  • Das sieht ganz normal aus. Voellig unverstaendlich, wieso die exe so riesig ist.



  • soll ich die exe mal hochladen?



  • Kann es am Compiller liegen?
    Das Hallo-Welt Programm was ich mit VC++ und GCC compiliert habe zeigt
    auch einen solchen Größenunterschied: 8kb bei VC++ und 450 Kb bei GCC.

    0x0ERROR



  • Ich hab seit ueber 10 Jahren kein Windows mehr auf der Festplatte. Vielleicht ist das ja auch normal (soll jetzt kein Bashing sein).



  • 0x0ERROR schrieb:

    Kann es am Compiller liegen?
    Das Hallo-Welt Programm was ich mit VC++ und GCC compiliert habe zeigt
    auch einen solchen Größenunterschied: 8kb bei VC++ und 450 Kb bei GCC.

    0x0ERROR

    450 kb? oder meinst du 45,0kb? also 450kb erscheint mir viel zu viel.

    ach ja, vor einiger zeit hab ich den mingw-crosscompiler unter linux verwendet (exe unter linux erzeugen), da hatte die datei auch ein halbes mb.

    vielleicht liegt es am linker?



  • Nein, ich habe mich nicht verschrieben.
    Unter Eigenschaften der Datei steht: 464 KB ⚠



  • Ähnliche Beiträge gibt es schon.

    Unter Windows:
    Also C-Hello World statisch:
    TinyCC etwa 1kB
    VS etwa 5 bis 8kB?
    gcc je nach Version etwa 50kb

    Das C++-Hello World statisch:
    g++ je nach Version sind mir schon 400 bis 900kB in Erinnerung

    Unter Linux sind gcc und g++ Ergebnisse deutlich kleiner.

    Hatte schon mal einen MinGW-GCC wo das Ergebnis auch unter Windows deutlich kleiner war. Find den nicht mehr. Da war C-Hello-World auch unter 10kB und als c++ unter 50kB. Müsste schon ein 4.x.y gewesen sind. Weiss aber nicht mehr woher ich den hatte.

    Seit C11 und C++11 sind die ausführbaren Dateien des GCC auch gewachsen.



  • Habe gerade den neuen Code::Blocks 12.11 mit dem MinGW GCC 4.7.1 getestet:
    Hello World ist mit dem gcc 26kB

    @ 0x0ERROR
    Wenn man meint einen C-Quelltext durch den g++ zu schicken, kommt man auf etwa 63kB. Ist doch mal wieder kleiner als ein paar Versionen vorher.


  • Administrator

    f.-th. schrieb:

    Habe gerade den neuen Code::Blocks 12.11 mit dem MinGW GCC 4.7.1 getestet:
    Hello World ist mit dem gcc 26kB

    Mit dem TDM-GCC habe ich die gleichen Werte. Und da ist die Standardbibliothek nicht statisch dazugelinkt. Zudem O3 Optimierungen angestellt.

    Wer sich über 26 KB auf einem heutigen Computer Gedanken macht, der hat zu viel Zeit. Das ist ja zum Teil nicht mal mehr im Embedded Bereich interessant. 😉

    Und ja, wahrscheinlich sind da jegliche Menge unnütze Headerdaten und anderes dabei. Es wird ja nicht einfach Maschinencode abgespeichert. Unter Windows wird das in eine PE Datei geschrieben.

    Grüssli


Anmelden zum Antworten