schrecklichen Code basteln



  • Ich möchte mal einen schrecklichen Code basteln(am besten mit euch zusammen) Mein Anfang:

    #include <iostream.h>
    using namespace std;
    int main(){
        a:
        int i = 4;
        ::std::cout << i++ << i << --i << ++i;
        int o = 0;
        int d;
        try{
            if(o == 0){
                goto a;
                throw string("");
            }
            d = i / o;
        }
        catch(string error0){
            ::std::cout << "div / 0";
        }
        char *ptr = 0;
        char& rc = *ptr;
        system("pause");
    }
    


  • ich würde es noch um soetwas ergänzen:

    typedef int myString;  //keine verwechslungsgefahr ;)
    
    myString doubleVar  = 0    //und klare anwendung ;)
    


  • Soweit bin ich nun:

    #include <iostream.h>
    using namespace std;
    
    typedef int myString;
    
    class AB{
        int a;
        int b;
    };
    
    class CD : public AB{
        int c;
        int d;
        AB a;
    };
    
    void deleteCD(AB array[]){
        delete [] array;
    }
    
    void main(){
        myString doubleVar  = 0;
        a:
        CD * a = new CD[5];
        deleteCD(a);
        int i = 4;
        ::std::cout << i++ << i << --i << ++i;
        int o = 0;
        int d;
        try{
            if(o == 0){
                goto a;
                throw string("");
            }
            d = i / o;
        }
        catch(string error0){
            ::std::cout << "div / 0";
        }
        char *ptr = 0;
        char& rc = *ptr;
        system("pause");
    }
    


  • Fast alle Variablen global anlegen und noch ein paar gleichnamige in der main()-Funktion (die sollte natürlich void main() heißen) und ab und zu auch die globalen Variablen per Globalzugriff (::) ändern.



  • So (::), kein Smiley!



  • Ich mach 'mal sowas:

    #include <io.h>
    
    char *p = "Gcihj&\x19OfhaX\x14\xfc",  f = 1, c = *p + f;
    
    int main( )
    {
        if( *p ) {
            write( 2 + f - ++f, &c, f - f + 1 );
            c = *( ++p ) + f; return main( );
        }
    }
    

    Hand auf's Herz: Wer schaffts ohne Compiler? 😃

    Greetz, Swordfish



  • Hallo,

    Nicht schlecht. Der Thread sollte zur Abschreckung in die FAQ

    MFG winexec*



  • Swordfish schrieb:

    [...]
    Hand auf's Herz: Wer schaffts ohne Compiler? 😃
    [...]

    "Stack overflow!"

    € Mist, doch net. Habs gerade getestet mitm bcc32:

    Konsole schrieb:

    Borland C++ 5.6.4 für Win32 Copyright (c) 1993, 2002 Borland
    main.cpp:
    Fehler E2120 main.cpp 9: 'main' darf nicht vom Programm aus aufgerufen werden in
    Funktion main()
    *** 1 Fehler bei der Compilierung ***

    €2 Sogar in einer extra Funktion gibts kein Stack overflow...



  • Beliah schrieb:

    "Stack overflow!"

    Wie kommst darauf?

    Beliah's Konsole schrieb:

    Fehler E2120 main.cpp 9: 'main' darf nicht vom Programm aus aufgerufen werden in Funktion main()

    Ahhrrgg!! 😡

    stimmt:

    ISO/IEC 14882:1998 schrieb:

    3.6.1.3:
    The function main shall not be used (3.2) within a program.

    na dann halt so (ist aber dann nicht mehr so schön):

    #include <io.h>
    
    char *p = "Gcihj&\x19OfhaX\x14\xfc",  f = 1, c = *p + f;
    
    int main( ) {
    
        while( *p ) {
    
            write( 2 + f - ++f, &c, f - f + 1 );
            c = *( ++p ) + f;
        }
    }
    

    Greetz, Swordfish



  • also als grundlage erstmal

    #define true false
    #define false true
    


  • Swordfish schrieb:

    Beliah schrieb:

    "Stack overflow!"

    Wie kommst darauf?
    [...]

    Hab mir den Code nicht genau angesehen und nicht bemerkt das p verändert wurde. Dann wäre das nämlich gekommen...

    Übrigens gehts auch so, dann wieder mit rekursion:

    #include <io.h>
    
    char *p = "Gcihj&\x19OfhaX\x14\xfc",  f = 1, c = *p + f;
    
    int test( )
    {
    if( *p ) { 
            write( 2 + f - ++f, &c, f - f + 1 ); 
            c = *( ++p ) + f; return test( ); 
        } 
    }
    int main( )
    {
     return test( );
    }
    


  • @claudia2:

    root@SUN //D/root/projects/_Visual Studio/codefun$ less test.cpp
    #define true false
    #define false true
    
    int main( )
    {
            bool _true = true;
            bool _false = false;
    }
    
    root@SUN //D/root/projects/_Visual Studio/codefun$ cpp test.cpp
    # 1 "test.cpp"
    
    int main( )
    {
            bool _true = true  ;
            bool _false = false  ;
    }
    
    root@SUN //D/root/projects/_Visual Studio/codefun$
    

    Greetz, Swordfish



  • true und false sind keywords, die darf man nicht definen.



  • #define private public
    

    nicht vergessen ^^



  • :schland::schland::schland::schland::schland:

    cout << "GER pwnz ITA"
    

    :schland::schland::schland::schland::schland:



  • Jester schrieb:

    true und false sind keywords, die darf man nicht definen.

    Wieso?



  • Und:

    #define private public

    Das darf in keinem Programm fehlen! 😉

    Edit: arg, zu spät! 🙂

    grüße



  • Better C(++) sollte man auch noch benutzen:

    http://thedailywtf.com/forums/thread/60528.aspx

    /*
         * BETTER_C.H   
         * Language refinements for C. 
         */
        #ifndef BETTER_C_H
        #define BETTER_C_H
    
        /* logical/comparison operators */
        #define NE  !=
        #define EQ  ==
        #define GT  >
        #define LT  <
        #define GE  >=
        #define LE  <=
        #define AND &&
        #define OR  ||
        #define NOT !
    
        /* bitwise operators */
        #define bNOT ~
        #define bAND &
        #define bOR  |
        #define bXOR ^
    
        /* arithmetic operators */
        #define MOD   %
    
        /* control constructs */
        #define repeat    do
        #define until(p)  while(NOT (p))
        #define forever   while(1)
        #define untilbreak  forever
        #define untilreturn forever
        #define unless(p) if(NOT (p))
        #define ifnot(p)  if(NOT (p))
        #define do_nothing
        #define then
    
        ...
    
        #endif
    


  • Inline-Assembler sollte auf keinen Fall fehlen ...

    #include <iostream>
    #define wr short int
    #define _unsigned_ 4711
    #define ping (char)
    #define bz != 0x21
    main(){
    wr cisc[] = {0x20,0x72,0x64,0x6b,0x74,0x71,0x1f,0x74,0x68,0x59},
    fx, i=_unsigned_;
    do{
    wr m = cisc[(_unsigned_ + 2*25/5)-i++-1];
    __asm mov ax, m
    __asm add ax, 1
    __asm mov fx, ax
    std::cout << ping fx;
    } while(fx bz); }
    


  • So im Netz gefunden:
    http://www.mitp.de/imperia/md/content/vmi/29842/2.pdf
    Wobei das schon sehr rauhe, radikale Methoden sind...


Anmelden zum Antworten