Anonymous - 2012-03-21

I can't read the code after decompile, can somebody tell me the how to read the CMEN_compute() & CMWRite_options() function.Many thanks~

void proc1();
void CMPA_init();
void CMPA_yyparse();
void CMEN_get_header_string();
void CMEN_compute();
void CMWRite_options();

// address: 0x1143c
int main(int argc, char *argv, char *envp) {
    __size32 fp; // r30
    __size32 g0; // r0
    __size32 g1; // r1
    int i0; // r24
    char * *i1; // r25
    char * *i2; // r26
    __size32 i3; // r27
    __size32 i4; // r28
    __size32 i5; // r29
    __size32 i7; // r31
    __size32 l0; // r16
    union { void * x3; int x4; } l0_1; // r16
    __size32 l1; // r17
    __size32 l2; // r18
    __size32 l3; // r19
    __size32 l3_1; // r19{281}
    __size32 l3_2; // r19{50}
    __size32 l3_3; // r19{41}
    __size32 l3_4; // r19{35}
    __size32 l3_5; // r19{30}
    __size32 l4; // r20
    __size32 l4_1; // r20{282}
    __size32 l4_2; // r20{50}
    __size32 l4_3; // r20{41}
    __size32 l4_4; // r20{35}
    __size32 l4_5; // r20{30}
    __size32 l5; // r21
    __size32 l5_1; // r21{283}
    __size32 l5_2; // r21{50}
    __size32 l5_3; // r21{41}
    __size32 l5_4; // r21{35}
    __size32 l5_5; // r21{30}
    __size32 l6; // r22
    __size32 l6_1; // r22{284}
    __size32 l6_2; // r22{50}
    __size32 l6_3; // r22{41}
    __size32 l6_4; // r22{35}
    __size32 l6_5; // r22{30}
    __size32 l7; // r23
    __size32 local0; // m
    __size32 local1; // m
    __size32 local10; // m
    __size32 local11; // m
    __size32 local12; // m
    __size32 local13; // m
    __size32 local14; // m
    int local15; // m{50}
    int local16; // m{50}
    int local17; // m{50}
    int local18; // m{50}
    int local19; // m{50}
    __size32 local2; // m
    int local20; // m{50}
    int local21; // m{50}
    int local22; // m{50}
    int local23; // m{50}
    int local24; // m{50}
    int local25; // m{50}
    int local26; // m{50}
    int local27; // m{50}
    int local28; // m{50}
    int local29; // m{50}
    __size32 local3; // m
    int local30; // %flags{50}
    int local31; // %flags{30}
    int local32; // %ZF{50}
    int local33; // %ZF{30}
    int local34; // %CF{50}
    int local35; // %CF{30}
    __size32 local36; // l3_1{281}
    __size32 local37; // l4_1{282}
    __size32 local38; // l5_1{283}
    __size32 local39; // l6_1{284}
    __size32 local4; // m
    __size32 local5; // m
    __size32 local6; // m
    __size32 local7; // m
    __size32 local8; // m
    __size32 local9; // m
    int o0; // r8
    union { void * x1; int x2; } o0_1; // r8
    char *o0_2; // r8
    FILE *o0_3; // r8
    int o1; // r9
    char *o1_1; // r9
    int o2; // r10
    int o2_1; // r10
    int o3; // r11
    int o4; // r12
    int o4_1; // r12{309}
    int o5; // r13
    int o6; // r14
    int o7; // r15

    g0 = proc1(argc, argv, envp, o3, o4, o5, o7, l0, l1, l2, l3, l4, l5, l6, 0x1a568, argc, argv, envp, o3, o4, o5, o6, o7, l1, l2, l3, l4, l5, l6, l7, i0, i1, i2, i3, i4, i5, fp, i7); /* Warning: also results in o1, o2, o3, o4, o5, o7, l0, l1, l3_5, l4_5, l5_5, l6_5, l7, i0, i1, i2, i3, i4, i5, fp, i7 */
    o0 = *(l7 + 428);
    o0 = CMPA_init(o0, o1, o2, o3, o4, o5, g0, 428, o7, l0, l1, 0, l3_5, l4_5, l5_5, l6_5, l7, i0, i1, i2, i3, i4, i5, fp, i7, local0, local1, local2, local3, local4, local5, local6, local7, local8, local9, local10, local11, local12, local13, local14, <all>, local31, local33, local35); /* Warning: also results in o1, o2, o3, o4, o5, o7, l0, l1, l2, l3_4, l4_4, l5_4, l6_4, l7, i0, i1, i2, i3, i4, i5, fp, i7 */
    if (o0 != 0) {
        o0 = CMPA_yyparse(o0, o1, o2, o3, o4, o5, o0, 0, o7, l0, l1, l2, l3_4, l4_4, l5_4, l6_4, l7, i0, i1, i2, i3, i4, i5, fp, i7, local0, local1, local2, local3, local4, local5, local6, local7, local8, local9, local10, local11, local12, local13, local14, <all>, SUBFLAGS(o0, 0, o0), o0 == 0, o0 < 0); /* Warning: also results in o1, o2, o3, o4, o5, o7, l0, l1, l2, l3_3, l4_3, l5_3, l6_3, l7, i0, i1, i2, i3, i4, i5, fp, i7 */
        if (o0 == 0) {
            g0 = CMEN_get_header_string(fp - 104, o1, o2, o3, o4, o5, o0, 0, o7, fp - 104, l1, l2, l3_3, l4_3, l5_3, l6_3, l7, i0, i1, i2, i3, i4, i5, fp, i7, local0, local1, local2, local3, local4, local5, local6, local7, local8, local9, local10, local11, local12, local13, local14, <all>, SUBFLAGS(o0, 0, o0), o0 == 0, o0 < 0); /* Warning: also results in g1, o2, o3, o4, o5, o7, l0, l2, l3_2, l4_2, l5_2, l6_2, l7, i0, i1, i2, i3, i4, i5, fp, i7 */
            l0 = CMEN_compute(l0, fp - 160, o2, o3, o4, o5, g0, g1, o7, l0, fp - 160, l2, l3_2, l4_2, l5_2, l6_2, l7, i0, i1, i2, i3, i4, i5, fp, i7, local15, local16, local17, local18, local19, local20, local21, local22, local23, local24, local25, local26, local27, local28, local29, <all>, local30, local32, local34); /* Warning: also results in l1, l2, l3_1, l4_1, l5_1, l6_1, l7, i0, i1, i2, i3, i4, i5, fp, i7 */
            local36 = l3_1;
            local37 = l4_1;
            local38 = l5_1;
            local39 = l6_1;
            o1_1 = *(l7 + 460);
            strcmp(l1, o1_1);
            if (o0 != 0) {
                o0 = *(l7 + 448);
                o1 = *(l7 + 24);
                fprintf(o0 + 32, o1);
L17:
                l2 = 1;
                local36 = l3;
                local37 = l4;
                local38 = l5;
                local39 = l6;
            }
            l3_1 = local36;
            l4_1 = local37;
            l5_1 = local38;
            l6_1 = local39;
            if (l2 == 0) {
                g1 = *(l7 + 488);
                *(__size32*)g1 = 0;
                o0_2 = *(l7 + 416);
                o1 = *(l7 + 480);
                strcpy(o0_2, o1);
                o0 = *(l7 + 452);
                o1 = *(l7 + 408);
                strcpy(o0, o1);
                o1 = *(l7 + 476);
                strcpy(fp - 368, o1);
                o4 = 0;
                g1 = (int) *(fp - 368);
                if (g1 == 32) {
                    o4 = 1;
                    g1 = (int) *(fp - 367);
                }
                o5 = *(l7 + 476);
                *(__size8*)o5 = 32;
                g1 = (int) *(fp + o4 - 368);
                g0 = g1;
                flags = SUBFLAGS(g1, 0, g1);
                o2 = 1;
                if (g1 != 0) {
                    do {
                        o4_1 = o4;
                        g1 = *(unsigned char*)(fp + o4_1 - 368);
                        *(__size8*)(o5 + o2) = (char) g1;
                        o4 = o4_1 + 1;
                        o2++;
                        g1 = (int) *(fp + o4_1 - 367);
                        g0 = g1;
                        flags = SUBFLAGS(g1, 0, g1);
                    } while (g1 != 0);
                }
                g1 = *(l7 + 476);
                *(__size8*)(g1 + o2) = 0;
                o0 = *(l7 + 36);
                printf(o0);
                o0 = CMWRite_options(o0, o1, o2, o3, o4, o5, g0, 36, o7, l0, l1, l2, l3_1, l4_1, l5_1, l6_1, l7, i0, i1, i2, i3, i4, i5, fp, i7, local0, local1, local2, local3, local4, local5, local6, local7, local8, local9, local10, local11, local12, local13, local14, <all>, flags, ZF, CF); /* Warning: also results in l2, l7 */
                if (o0 != 0) {
                    o0 = *(l7 + 448);
                    o1 = *(l7 + 40);
                    fprintf(o0 + 32, o1);
                    l2 = 1;
                }
                if (l2 != 0) {
                    goto L0;
                }
                exit(0);
            }
L0:
            exit(1);
        }
        o0 = *(l7 + 448);
        o1 = *(l7 + 28);
        fprintf(o0 + 32, o1);
        goto L17;
    }
    o0 = *(l7 + 448);
    o1 = *(l7 + 32);
    fprintf(o0 + 32, o1);
    goto L17;
}