Compiler mit kleinsten Executables



  • Nimm INT 3, das ist nur 1 Byte 😉

    (0xCC vs. 0xCD 0xnn)



  • @SideWinder

    Habe die Aussage:
    Da müsste dann ja nur ein Programm vorher ausgeführt werden,
    ...

    ...so interpretiert, dass man damit die 2 Bytes ausgeführt werden können vorher noch ein anderes Programm gestartet werden muss. Das heisst die 2 Bytes wären "alleine" nicht lauffähig, man müsste vorher schon was getan haben, dass aber auch eine bestimmte länge an Code braucht...

    Ja, hoffe keinen Denkfehler gemacht zu haben...

    cu,
    Lukas

    [ Dieser Beitrag wurde am 12.06.2002 um 21:48 Uhr von Consystor editiert. ]



  • Oje 19 Bytes. Mal gucken ob das Prog noch auf meine 21990232555520 Byte Festplatte draufpasst 😃 😉 :p 🙄

    mfg

    PS: 21990232555520 bytes müssten doch rund 20 Gix sein, wenn ich mich nicht verrechnet hab. 🙂



  • Original erstellt von Chris++:
    **Oje 19 Bytes. Mal gucken ob das Prog noch auf meine 21990232555520 Byte Festplatte draufpasst 😃 😉 :p 🙄
    **

    Die Kosten für den Verzeichniseintrag sind ja schon größer als der Datei Inhalt (nein, kein amerkanistischer Getrenntschreibfehler, that's Genitiv). Mit ner Clustersize von 16kb auf ner großen FAT-Platte kommste auf ein Schrott-Zu-Nutzdatenverhältnis von 800/1.



  • Ah... und das heißt? 😮



  • das jedes programm immer nur auf der Festplatte in 16 kb schritten gespeichert wird 😑 machst du Text Datei mit einem Zeichen -> 16 KB auf Festplatte weg, machst du Textdaei mit 16 KB und 1 Byte -> 32 KB weg usw... ist leider Verwaltungstechnisch nötig sonst würden da diverse Dinge vielzuviele Daten zu verwalten haben



  • Achso. D.H. ich müsste jetzt meine Zahl nochmal durch 16 teilen um an das richtige ergebniss zu kommen.



  • man nehme ein perfektes ffs dateisystem mit selbst festzulegender blockgröße und automatischer defragmentierung durch klasse (net)bsd dateisystemtechnik 😃 😃



  • @Chris++: Nein, eigentlich nicht. Du musst nur damit rechnen, dass eine Datei mit 1kb 16kb belegt. Die Größe herauszufinden ist unter Windows sehr einfach: Datei -> Rechtsklick -> Eigenschaften. Dann steht unter Größe, z.B.:

    Größe: 1,50 KB (1.536 Byte), 16.384 Byte belegt

    MfG SideWinder



  • Original erstellt von Chris++:
    Oje 19 Bytes. Mal gucken ob das Prog noch auf meine 21990232555520 Byte Festplatte draufpasst 😃 😉 :p 🙄

    Was, du hast eine 21 Terrabyte Festplatte ? 😉
    Vielleicht sollte ich mir auch so eine zulegen. Meine 100GB sind schon fast voll.

    [ Dieser Beitrag wurde am 13.06.2002 um 21:34 Uhr von DrZoidberg editiert. ]



  • http://www.farb-rausch.com/ -> look out for 16byte!!!! demo [fr-016]



  • jo, und bitte auch mal disassemblieren 😃 versteht einer was da genau abgeht?



  • Disassembliert siehts so aus:

    :0001.0100 B013                   mov al, 13
    :0001.0102 CD10                   int 10
    :0001.0104 C42F                   les bp, [bx]
    
    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:0001.010E(U)
    |
    :0001.0106 AA                     stosb
    :0001.0107 11F8                   adc ax, di
    :0001.0109 6413066C04             adc ax, fs:[046C]
    :0001.010E EBF6                   jmp 0106
    

    naja... das soll mal einer durchblicken :p
    So wie ich das sehe, sind da ziemlich viele Annahmen im Spiel. was ist bx beim start, worauf zeigt ds:si, was ist fs, di und ax? Naja sowas geht auch nur unter DOS. 😃



  • achja, fs:[046C] wird wahrscheinlich auf den bildschirmspeicher zeigen. Der erste int 10 schaltet dann wohl in den grafikmodus um.
    Und es ist ne ganz hübsche endlosschleife 😉



  • Also auf Deutsch gesagt, bringt das Programm absolut nichts?

    MfG SideWinder



  • Shade Of Mine schrieb:

    Kleiner gehts AFAIK nicht mehr.

    wenn man dem linker auch ein kleines /align gibt, darf man das /filealign auch runtersetzen.
    man kann nen kleineren stub nehmen.
    macht zusammen 576 bytes.

    #pragma comment(linker,"/FILEALIGN:16")
    #pragma comment(linker,"/ALIGN:16")
    //#pragma comment(exestr,"<< (c) Volkard Henkel >>")
    #pragma comment(linker,"/IGNORE:4078")
    #pragma comment(linker,"/IGNORE:4089")
    #pragma comment(linker,"/MERGE:.rdata=.text")
    #pragma comment(linker,"/MERGE:.data=.text")
    #pragma comment(linker,"/SECTION:.text,ERW")
    
    #pragma comment(linker,"/nodefaultlib")
    #pragma comment(linker,"/incremental:no")
    #pragma comment(linker,"/entry:crtmain")
    #pragma comment(linker,"/subsystem:console")
    
    //der stub ist von http://its.mine.nu/html/coding/essays/stub.html
    #pragma comment(linker,"/IGNORE:4060")
    #pragma comment(linker,"/stub:stub.exe")
    
    #pragma optimize("s",on)
    
    #include <windows.h>
    
    int __stdcall crtmain()
    {
    	DWORD bytesWritten;
    	WriteFile(GetStdHandle(STD_OUTPUT_HANDLE),"hello, world!",13,&bytesWritten,NULL);
    	return 0;
    }
    /*
    26.02.2004  03:56               576 test1.exe
                   1 Datei(en)            576 Bytes
    */
    


  • (korbinian: sry! hab ausbersehen hier editiert. mach deinen beotrag bitte wieder rein)



  • *vielleicht* das symbolische linken?



  • was meinst du mit symbolischem linken?



  • sory, hab da was durcheinander gebracht und aus versehen deinen beitrag bearbeitet statt zitiert 😞

    hab das -s flag von ln mit dem -s (static) von ld verwechselt. sry 😞


Anmelden zum Antworten