C++程序  |  467行  |  8.78 KB

// #include <stdio.h>
int d, z, C, h, P, K, ac, q, G, v, Q, R, D, L, W, M;

void E(int e) {
    *(char*) D++ = e;
}

void o() {
    if (L) {
        h = *(char*) L++;
        if (h == 2) {
            L = 0;
            h = W;
        }
    } else
        h = fgetc(Q);
}

int X() {
    return isalnum(h) | h == 95;
}

void Y() {
    if (h == 92) {
        o();
        if (h == 110)
            h = 10;
    }
}

void ad() {
    int e, j, m;
    while (isspace(h) | h == 35) {
        if (h == 35) {
            o();
            ad();
            if (d == 536) {
                ad();
                E(32);
                *(int*) d = 1;
                *(int*) (d + 4) = D;
            }
            while (h != 10) {
                E(h);
                o();
            }
            E(h);
            E(2);
        }
        o();
    }
    C = 0;
    d = h;	
    if (X()) {
        E(32);
        M = D;
        while (X()) {
            E(h);
            o();
        }
        if (isdigit(d)) {
            z = strtol(M, 0, 0);
            d = 2;
        } else {
            *(char*) D = 32;
            d = strstr(R, M - 1) - R;
            *(char*) D = 0;
            d = d * 8 + 256;
            if (d > 536) {
                d = P + d;
                if (*(int*) d == 1) {
                    L = *(int*) (d + 4);
                    W = h;
                    o();
                    ad();
                }
            }
        }
    } else {
        o();
        if (d == 39) {
            d = 2;
            Y();
            z = h;
            o();
            o();
        } else if (d == 47 & h == 42) {
            o();
            while (h) {
                while (h != 42)
                    o();
                o();
                if (h == 47)
                    h = 0;
            }
            o();
            ad();
        } else {
            e
                    = "++#m--%am*@R<^1c/@%[_[H3c%@%[_[H3c+@.B#d-@%:_^BKd<<Z/03e>>`/03e<=0f>=/f<@.f>@1f==&g!='g&&k||#l&@.BCh^@.BSi|@.B+j~@/%Yd!@&d*@b";
            while (j = *(char*) e++) {
                m = *(char*) e++;
                z = 0;
                while ((C = *(char*) e++ - 98) < 0)
                    z = z * 64 + C + 64;
                if (j == d & (m == h | m == 64)) {
                    if (m == h) {
                        o();
                        d = 1;
                    }
                    break;
                }
            }
        }
    }
}

void ae(int g) {
    while( g&&g!=-1) {
        *(char*) q++=g;
        g=g>>8;
    }
}

void A(int e) {
    int g;
    while( e) {
        g=*(int*) e;
        *(int*) e=q-e-4;
        e=g;
    }
}

int s(int g, int e) {
    ae(g);
    *(int*) q = e;
    e = q;
    q = q + 4;
    return e;
}

void H(int e) {
    s(184,e);
}

int B(int e) {
    return s(233,e);
}

int S(int j, int e) {
    ae(1032325);
    return s(132 + j, e);
}

void Z(int e) {
    ae( 49465);
    H(0);
    ae( 15);
    ae( e+144);
    ae( 192);
}

void N(int j, int e) {
    ae(j + 131);
    s((e > -512 && e < 512) << 7 | 5, e);
}

void T (int j) {
    int g,e,m,aa;
    g=1;
    if( d == 34) {
        H(v);
        while( h!=34) {
            Y ();
            *(char*) v++=h;
            o ();
        }
        *(char*) v=0;
        v=v +4&-4;
        o ();
        ad();
    }
    else {
        aa=C;
        m= z;
        e=d;
        ad();
        if( e == 2) {
            H(m);
        }
        else if( aa == 2) {
            T(0);
            s(185,0);
            if( e == 33)Z(m);
            else ae( m);
        }
        else if( e == 40) {
            w ();
            ad();
        }
        else if( e == 42) {
            ad();
            e=d;
            ad();
            ad();
            if( d == 42) {
                ad();
                ad();
                ad();
                ad();
                e=0;
            }
            ad();
            T(0);
            if( d == 61) {
                ad();
                ae( 80);
                w ();
                ae( 89);
                ae( 392+(e == 256));
            }
            else if( e) {
                if( e == 256)ae( 139);
                else ae( 48655);
                q++;
            }
        }
        else if( e == 38) {
            N(10,*(int*) d);
            ad();
        }
        else {
            g=*(int*) e;
            if(!g)g=dlsym(0,M);
            if( d == 61&j) {
                ad();
                w ();
                N(6,g);
            }
            else if( d!= 40) {
                N(8,g);
                if( C == 11) {
                    N(0,g);
                    ae( z);
                    ad();
                }
            }
        }
    }
    if( d == 40) {
        if( g == 1)ae( 80);
        m= s(60545,0);
        ad();
        j=0;
        while( d!= 41) {
            w ();
            s(2393225,j);
            if( d == 44)ad();
            j=j +4;
        }
        *(int*) m= j;
        ad();
        if(!g) {
            e=e +4;
            *(int*) e=s(232,*(int*) e);
        }
        else if( g == 1) {
            s(2397439,j);
            j=j +4;
        }
        else {
            s(232,g-q-5);
        }
        if( j)s(50305,j);
    }
}

void O (int j) {
    int e,g,m;
    if( j--== 1)T(1);
    else {
        O (j);
        m= 0;
        while( j == C) {
            g=d;
            e=z;
            ad();
            if( j>8) {
                m= S(e,m);
                O (j);
            }
            else {
                ae( 80);
                O (j);
                ae( 89);
                if( j == 4|j == 5) {
                    Z(e);
                }
                else {
                    ae( e);
                    if( g == 37)ae( 146);
                }
            }
        }
        if( m&&j>8) {
            m= S(e,m);
            H(e^1);
            B(5);
            A(m);
            H(e);
        }
    }
}

void w() {
    O(11);
}

int U() {
    w();
    return S(0, 0);
}

void I (int j) {
    int m,g,e;
    if( d == 288) {
        ad();
        ad();
        m= U ();
        ad();
        I (j);
        if( d == 312) {
            ad();
            g=B(0);
            A(m);
            I (j);
            A(g);
        }
        else {
            A(m);
        }
    }
    else if( d == 352|d == 504) {
        e=d;
        ad();
        ad();
        if( e == 352) {
            g=q;
            m= U ();
        }
        else {
            if( d!= 59)w ();
            ad();
            g=q;
            m= 0;
            if( d!= 59)m= U ();
            ad();
            if( d!= 41) {
                e=B(0);
                w ();
                B(g-q-5);
                A(e);
                g=e +4;
            }
        }
        ad();
        I(&m);
        B(g-q-5);
        A(m);
    }
    else if( d == 123) {
        ad();
        ab(1);
        while( d!= 125)I (j);
        ad();
    }
    else {
        if( d == 448) {
            ad();
            if( d!= 59)w ();
            K=B(K);
        }
        else if( d == 400) {
            ad();
            *(int*) j=B(*(int*) j);
        }
        else if( d!= 59)w ();
        ad();
    }
}

void ab (int j) {
    int m;
    while( d == 256|d!=-1&!j) {
        if( d == 256) {
            ad();
            while( d!= 59) {
                if( j) {
                    G=G +4;
                    *(int*) d=-G;
                }
                else {
                    *(int*) d=v;
                    v=v +4;
                }
                ad();
                if( d == 44)ad()	;
            }
            ad();
        }
        else {
            A(*(int*)(d +4));
            *(int*) d=q;
            ad();
            ad();
            m= 8;
            while( d!= 41) {
                *(int*) d=m;
                m= m +4;
                ad();
                if( d == 44)ad();
            }
            ad();
            K=G=0;
            ae( 15042901);
            m= s(60545,0);
            I(0);
            A(K);
            ae( 50121);
            *(int*) m= G;
        }
    }
}

int run(int g, int e) {
    return (*(int(*)()) *(int*) (P + 592))(g, e);
}

int main(int g, int e) {
    int result;
    Q = stdin;
    if (g-- > 1) {
        e = e + 4;
        Q = fopen(*(int*) e, "r");
        if (!Q) {
            fprintf(stderr, "otcc-ansi.c: could not open file %s\n", *(int*) e);
            return -2;
        }
    }
    D = strcpy(R = calloc(1, 99999), " int if else while break return for define main ") + 48;
    v = calloc(1, 99999);
    q = ac = calloc(1, 99999);
    P = calloc(1, 99999);
    o();
    ad();
    ab(0);
    if (mprotect(ac & (~ 4095), (99999 + 4095) & (~ 4095), 7)) {
        printf("Mprotect failed. %d\n", errno);
        return -1;
    }
    fprintf(stderr, "otcc-ansi.c: About to execute compiled code:\n");
    result = run(g, e);
    fprintf(stderr, "atcc-ansi.c: result: %d\n", result);
    return result;
}