LIST 84 ============================================================================ #include #include #include FILE *fp; int ni[1000], m[15000], p[300][10], d_mode; char n[300][60], tail[3]; static void access_flag_printf(int para); static void byte_code_printf(long address); static void display_information(int mode, int id); int main(int argc,char **argv){ int d, i, j, k, ct; unsigned int p0, p00, p1, p2, p3; int pp=0, count=0, p4, p5, sb; unsigned char ss, st[20], d0, d1, d2, d3; st[16]=0; tail[0]=59; tail[1]=0; d_mode=1; if( argc != 2 ){ printf("... target file name missing (;_;) ...\n\n"); exit(1); } else if( (fp=fopen( argv[1], "rb" ))==NULL ){ printf("... target file [ %s ] is not found (;_;) ...\n\n", argv[1]); exit(1); } if(d_mode==0) printf("Target Java File Name = %s\n", argv[1]); else if(d_mode==1) printf("/* Source Java File Name = %s */\n\nmain(){\n\tinit()%s\n\twhile(1){\n\t\trun()%s\n\t}\n}", argv[1], tail, tail); while( (d = fgetc(fp)) >= 0 ){ m[count++] = d & 0xff; } fclose(fp); if(d_mode==0) printf("\nTotal File Length = %d bytes.", count); p0 = m[pp+3]+256*m[pp+2]; p00 = m[pp+1]+256*m[pp]; if(d_mode==0) printf("\n\n\t%06X Magic Code [CAFEBABE] = %04X%04X",pp,p00,p0); pp += 4; if(( p00 != 0xcafe )||( p0 != 0xbabe )){ if(d_mode==0) printf("\n\n... target file is not Java (;_;) ...\n\n"); exit(1); } else if(d_mode==0) printf(" --- OK (^_^)"); if(d_mode==0) printf("\n\n\t%06X Version : major version %d , minor version %d", pp, m[pp+3]+256*m[pp+2], m[pp+1]+256*m[pp] ); pp += 4; p1 = m[pp+1]+256*m[pp]; if(d_mode==0) printf("\n\n\t%06X Constant Pool : total number = %d\n", pp, p1 ); pp += 2; /***** Ãæά *****/ p1 = m[pp+1]+256*m[pp]; pp += 2; if(d_mode==0) printf("\n\n\t%06X Methods Count = %d", pp-2, p1 ); for(i=0;i