This program reads a .class file & display its contents.
How to go ahead
Contents Overview
//Source Code
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<alloc.h>
#include<stdlib.h>
#include<ctype.h>
struct file_attr
{
int name;
int len;
};
struct file
{
char magic[10];
int verno1;
int verno2;
int cp_c;
int a_flags;
int this_cl;
int super_cl;
int inter_c;
int field_c;
int meth_c;
int attr_c;
file_attr *fiattr;
int f_name;
};
struct field //field_info
{
int a_flag;
int name;
int dindex; //descriptor index
int attr_c;
void *attr_i; //only attr -> ConstantValue_attr(struct cvattr)
};
struct cvattr //ConstantValue_attribute
{
int name; //attribute name
int len; //attr length
int cvindex; //valid index into the constant_pool table
};
struct meth_attr
{
int name;
int len;
};
struct meth
{
int a_flag;
int name;
int sign;
int attr_c;
meth_attr *mthattr; //code_info
};
struct guid
{
unsigned char x1[4];
unsigned char x2[2];
unsigned char x3[2];
unsigned char x4[8];
};
int small( char *ss )
{
return ss[0]*256+ss[1];
}
struct aaa
{
int x1, x2;
};
struct bbb
{
int x;
char *ss;
};
struct ccc
{
long x1,x2;
};
struct pool_info
{
int tag;
void *info;
};
void abc( char *ss )
{
static int k=0;
FILE *fpo= fopen("z.txt", "a");
fprintf(fpo, "%d=%s\n", k, ss);
k++;
fclose(fpo);
}
pool_info *p;
char *get( int x, int y=1 )
{
int jj;
switch(p[x].tag)
{
case 7:
case 8:
jj = ((aaa *)p[x].info)->x1;
return get ( jj );
case 9:
case 10:
case 12:
if( y==1 )
{
jj = ((aaa *)p[x].info)->x1;
return get ( jj );
}
else
{
jj = ((aaa *)p[x].info)->x2;
return get ( jj );
}
default :
return ((bbb *)p[x].info)->ss;
}
}
char* signat(char **);
char* rtype( char **);
int main(int argc, char *argv[])
{
int debuginfo=0;
int ActiveXflag=0;
FILE *fp;
int offset[9];
int counter=0;
file fi;
int *iface;
fp = fopen(argv[1],"r+b");
if(fp==NULL)
{
printf("File not found\n");
exit(0);
}
char *aa=new char[100];
char *bb=new char[100];
offset[0]=0;
fread(aa,4,1,fp); //Skip CAFEBABE
counter=4; aa[4]='\0';
strcpy( fi.magic, aa);
fread(aa,2,1,fp); //Version Nos.
counter+=2;
fi.verno1=small(aa);
fread(aa,2,1,fp); //Version Nos.
counter+=2;
fi.verno2=small(aa);
fread(aa,2,1,fp); //Constant pool size
counter+=2;
fi.cp_c=small(aa);
sprintf(bb, "Constant Pool Size=%d\n", fi.cp_c);
abc(bb);
p = new pool_info[fi.cp_c];
offset[1]=counter;
int k;int i;
for ( int j=1; j<fi.cp_c; j++)
{
i = fgetc(fp);
counter++;
switch(i)
{
case 1:
bbb *s = new bbb;
fread(aa,2,1,fp); counter+=2;
s->x=small(aa);
fread(aa, s->x, 1, fp); counter+=s->x;
aa[s->x]='\0';
s->ss = new char[s->x+1];
strcpy(s->ss, aa);
p[j].tag=1;
p[j].info = (void *)s;
sprintf(bb, "%s(%d)", ((bbb *)p[j].info)->ss, p[j].tag);
abc(bb);
break;
case 3:
case 4:
ccc *tem=new ccc;
fread(aa,4,1,fp); counter+=4;
tem->x1 = aa[2]*256+aa[3];
if(i==3)
p[j].tag=3;
else
p[j].tag=4;
p[j].info=(void *)tem;
sprintf(bb, "%ld(%d)", ((ccc *)p[j].info)->x1,p[j].tag);
abc(bb);
break;
case 5 :
case 6 :
ccc *tem2=new ccc;
fread(aa,4,1,fp); counter+=4;
tem2->x1 = aa[2]*256+aa[3];
fread(aa,4,1,fp); counter+=4;
tem2->x2 = aa[2]*256+aa[3];
if(i==5)
p[j].tag=5;
else
p[j].tag=6;
p[j].info=(void *)tem2;
sprintf(bb, "%ld..%ld(%d)", ((ccc *)p[j].info)->x1,((ccc *)p[j].info)->x2,p[j].tag);
abc(bb);
break;
case 7:
case 8:
aaa *temp;
temp=new aaa;
fread(aa,2,1,fp);
counter+=2;
temp->x1 = small(aa);
if(i==7)
p[j].tag=7;
else
p[j].tag=8;
p[j].info=(void *)temp;
sprintf(bb, "%d(%d)", ((aaa *)p[j].info)->x1,p[j].tag);
abc(bb);
break;
case 9 :
case 11:
case 10:
case 12:
aaa *temp1;
temp1 = new aaa;
fread(aa,2,1,fp);
counter+=2;
temp1->x1=small(aa);
fread(aa,2,1,fp);
counter+=2;
temp1->x2=small(aa);
if(i==9) p[j].tag=9;
else if (i==10) p[j].tag=10;
else if (i==11) p[j].tag=11;
else p[j].tag=12;
p[j].info = (void *)temp1;
sprintf(bb,"%d..%d(%d)", ((aaa *)p[j].info)->x1, ((aaa *)p[j].info)->x2, p[j].tag);
abc(bb);
break;
}
}
offset[2]=counter;
fread(aa, 2, 1, fp); //Flags
counter+=2;
fi.a_flags = small(aa);
fread(aa, 2, 1, fp); //this_class
counter+=2;
fi.this_cl=small(aa);
fread(aa, 2, 1, fp); //super_class
counter+=2;
fi.super_cl=small(aa);
offset[3]=counter;
fread(aa, 2, 1, fp); //interface
counter+=2;
fi.inter_c=small(aa);
if(fi.inter_c != 0)
{
iface = new int[fi.inter_c];
for(i=0; i<fi.inter_c; i++)
{
fread(aa,2,1,fp);
iface[i] = small(aa);
counter+=2;
}
}
offset[4]=counter;
fread(aa, 2, 1, fp); //fields
counter+=2;
fi.field_c=small(aa);
field *fld=new field[fi.field_c];
for(i=0; i<fi.field_c; i++)
{
fread ( aa, 2, 1, fp);
counter+=2;
fld[i].a_flag=small(aa);
fread(aa, 2, 1, fp);
counter+=2;
fld[i].name=small(aa);
fread(aa, 2, 1, fp);
counter+=2;
fld[i].dindex=small(aa);
fread(aa, 2, 1, fp);
counter+=2;
fld[i].attr_c=small(aa); //only attr is ConstantValur_attr
if (fld[i].attr_c !=0)
{
cvattr *cva;
fread(aa, 2, 1, fp);
counter+=2;
cva->name=small(aa);
fread(aa, 4, 1, fp);
counter+=4;
cva->len=aa[2]*256+aa[3];
fread(aa, 2, 1, fp);
counter+=2;
cva->cvindex = small(aa);
fld[i].attr_i=(void *)cva;
}
}
offset[5]=counter;
fread(aa, 2, 1, fp); //methods
counter+=2;
fi.meth_c=small(aa);
meth *mth=new meth[fi.meth_c];
int jj;
for( j=0; j<fi.meth_c; j++ ) //fi.meth_c
{
fread ( aa, 2, 1, fp);
counter+=2;
mth[j].a_flag=small(aa);
fread(aa, 2, 1, fp);
counter+=2;
mth[j].name=small(aa);
fread(aa, 2, 1, fp);
counter+=2;
mth[j].sign=small(aa);
fread(aa, 2, 1, fp);
counter+=2;
mth[j].attr_c=small(aa);
int name;
mth[j].mthattr=new meth_attr[mth[j].attr_c];
for(int ii=0; ii<mth[j].attr_c; ii++)
{
fread(aa, 2, 1, fp);
counter+=2;
name=small(aa);
if(!strcmp("COM_ProxiesTo",get(name)))
{
mth[j].mthattr[ii].name=name;
ActiveXflag=1;
fread(aa, 4, 1, fp);
counter+=4;
mth[j].mthattr[ii].len=aa[2]*256+aa[3];
for(i=0; i<mth[j].mthattr[ii].len; i++)
{ fgetc(fp); counter++; }
}
else
{
mth[j].mthattr[ii].name=name;
fread(aa, 4, 1, fp);
counter+=4;
mth[j].mthattr[ii].len=aa[2]*256+aa[3];
for(i=0; i<mth[j].mthattr[ii].len; i++)
{
fgetc(fp);
counter++;
}
}
}
}
offset[6]=counter;
fread(aa, 2, 1, fp);
counter+=2;
fi.attr_c=small(aa);
fi.fiattr=new file_attr[fi.attr_c];
int no_guid;
guid *gguid;
for(i=0; i<fi.attr_c; i++)
{
fread(aa, 2, 1, fp);
int name=small(aa);
counter+=2;
if(strcmp(get(name), "SourceFile")==0)
{
fi.fiattr[i].name=name;
fread(aa, 4, 1, fp); counter+=4;
fi.fiattr[i].len=aa[2]*256+aa[3];
fread(aa, 2, 1, fp); counter+=2;
fi.f_name = small(aa);
}
else if(strcmp(get(name), "COM_GuidPool")==0)
{
fi.fiattr[i].name=name;
fread(aa, 4, 1, fp); counter+=4;
fi.fiattr[i].len=aa[2]*256+aa[3];
fread(aa, 2, 1, fp); counter+=2; //no. of guid
no_guid=small(aa);
gguid=new guid[no_guid];
for(j=0; j<no_guid; j++)
{
guid *gg;
fread(gg, 16, 1, fp); counter+=16;
gguid[j]=*gg;
}
}
else
{
fi.fiattr[i].name=name;
fread(aa, 4, 1, fp); counter+=4;
fi.fiattr[i].len=aa[2]*256+aa[3];
for(j=0; j<fi.fiattr[i].len; j++)
{
fgetc(fp); counter++;
}
}
}
fclose(fp);
//******************* Output data ***********************
char *d1[] = {
"Class Name ",
"Size ",
"Version ",
"Access F\lags ",
"Super Class Name ",
"Interface(s) ",
"Source Filename ",
"Debug Information",
"ActiveX Controls "
};
printf("\n*** jvm7 D1 Class/Interface Overview ***\n\n");
printf("Variable Name\t\tValue Reported\n");
printf("~~~~~~~~~~~~~~\t\t~~~~~~~~~~~~~~~\n");
printf("%s\t%s\n", d1[0], get( fi.this_cl));
printf("%s\t%d\n", d1[1], counter);
printf("%s\t%d.0%d\n", d1[2], fi.verno2, fi.verno1);
printf("%s\n", d1[3]);
printf("%s\t%s\n", d1[4], get( fi.super_cl));
if( !fi.inter_c )
printf("%s\t* None Defined *\n", d1[5]);
else
{
printf("%s\t", d1[5]);
for(i=0; i<fi.inter_c; i++)
printf("%s,",get(iface[i]));
}
printf("\n%s\t%s\n", d1[6], get(fi.f_name));
if(debuginfo==1)
printf("%s\tYES\n", d1[7]);
else
printf("%s\tNO\n", d1[7]);
if(ActiveXflag==1)
printf("%s\tYES\n", d1[8]);
else
printf("%s\tNO\n", d1[8]);
printf("\n*** jvm7 D2 Class/Interface Methods, Fields, & Classes ***\n\n");
printf("Methods (Invoked)\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
for(i=1; i<fi.cp_c; i++)
{
if(p[i].tag == 10)
{
char *sign = new char[100];
sign=get(((aaa *)p[i].info)->x2, 2);
strcpy(bb,signat(&sign));
sign++;
strcpy(aa, rtype(&sign));
printf("%s ",aa);
printf("%s.%s%s\n",get(((aaa *)p[i].info)->x1),
get(((aaa *)p[i].info)->x2),bb);
}
}
printf("\nMethods (Interfaced)\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("* NA *\n\n");
printf("Fields (Accessed and/or Modified)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
for(i=0; i<fi.field_c; i++)
{
strcpy(aa, get(fld[i].dindex));
strcpy(bb, rtype(&aa));
printf("%s %s\n", bb,get(fld[i].name));
}
printf("\n\nMethods (Explicitely Declared by this Class/Interface)\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
for(i=0; i<fi.meth_c; i++)
{
char *sign = new char[100];
sign=get(mth[i].sign);
printf("Method[%04X]\t", i);
strcpy(bb,signat(&sign));
sign++;
strcpy(aa, rtype(&sign));
printf("%s ",aa);
strcpy(aa, get(mth[i].name));
printf("%s%s\n",aa, bb);
}
printf("\n\n");
printf("Fields (Explicitely Declared by this Class/Interface)\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("* NA *\n\n");
printf("Classes (Accessed by this Class/Interface)\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
for(i=1; i<fi.cp_c+1; i++)
{
if(p[i].tag == 7)
printf("%s\n", get( i ));
}
printf("\n\n");
printf("COM_Guid's (Explicitly Declared by this Class/Interface)\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
for(j=0; j<no_guid; j++)
{
for(int k=3; k>=0; k--)
printf("%X", gguid[j].x1[k]);
printf("-");
for(k=1; k>=0; k--)
printf("%X", gguid[j].x2[k]);
printf("-");
for(k=1; k>=0; k--)
printf("%X", gguid[j].x3[k]);
printf("-");
for(k=0; k<8; k++)
printf("%X", gguid[j].x4[k]);
printf("\n");
}
printf("\n");
char *d3[] = {
"ClassFile.magic ",
"ClassFile.minor_version ",
"ClassFile.major_version ",
"ClassFile.constant_pool_count",
"ClassFile.Constant_pool ",
"ClassFile.access_flags ",
"ClassFile.this_class ",
"ClassFile.super_class ",
"ClassFile.interfaces_count ",
"ClassFile.interfaces",
"ClassFile.fields_count ",
"ClassFile.fields",
"ClassFile.methods_count ",
"ClassFile.methods ",
"ClassFile.attributes_count ",
"ClassFile.attributes "
};
printf("*** jvm7 D3 Class/Interface Root Data Structures ***\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("offset Bytes Field Name Meaning\n");
printf("~~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~~\n");
int zz=offset[0];
printf("%06X CAFEBABE %s\n", zz, d3[0]);
printf("%06X %04X \t%s\tDecimal (%d)\n",zz+=4, fi.verno1, d3[1], fi.verno1);
printf("%06X %04X \t%s\tDecimal (%d)\n",zz+=2, fi.verno2, d3[2], fi.verno2);
printf("%06X %04X \t%s\tDecimal (%d)\n",zz+=2, fi.cp_c, d3[3], fi.cp_c);
printf("%06X \t\t%s\tcp\n", zz+=2, d3[4]);
printf("%06X %04X \t%s\n", zz=offset[2], fi.a_flags, d3[5]);
printf("%06X %04X \t%s\t%s\n", zz+=2, fi.this_cl, d3[6], get(fi.this_cl));
printf("%06X %04X \t%s\t%s\n", zz+=2, fi.super_cl, d3[7], get( fi.super_cl));
printf("%06X %04X \t%s\tDecimal (%d)\n", zz=offset[3], fi.inter_c, d3[8], fi.inter_c);
printf("%06X \t\t%s\t\t\t interfaces\n", zz+=2, d3[9]);
printf("%06X %04X \t%s\tDecimal (%d)\n", zz=offset[4], fi.field_c, d3[10], fi.field_c);
printf("%06X \t\t%s\t\t\t fields\n", zz+=2, d3[11]);
printf("%06X %04X \t%s\tDecimal (%d)\n", zz=offset[5], fi.meth_c, d3[11], fi.meth_c);
printf("%06X \t\t%s\t\t\t Methods\n", zz+=2, d3[11]);
printf("%06X %04X \t%s\tDecimal (%d)\n", zz=offset[6], fi.attr_c, d3[12], fi.attr_c);
printf("%06X \t\t%s\tattributes\n\n", zz+=2, d3[13]);
printf("*** jvm7 D3 Class/Interface Root Data Structures ***\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("offset Bytes Field Name Meaning\n");
printf("~~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~~\n");
zz=offset[1]; char cc[20];
for(i=1; i<fi.cp_c; i++)
{
switch(p[i].tag)
{
case 1 :
printf("%06X\t%02X\t\tcp[%04X].tag\t\tCONSTANT_Utf8\n", zz, 1, i);
zz++; j=((bbb *)p[i].info)->x;
printf("%06X\t%04X\t\tcp[%04X].length\n", zz, j, i); zz+=2;
printf("%06X\t\t\tcp[%04X].bytes\t\t%s\n\n", zz, i, ((bbb *)p[i].info)->ss);
zz+=j;
break;
case 3 :
case 4 :
if(p[i].tag==3)
printf("%06X\t%02X\t\tcp[%04X].tag\t\tCONSTANT_integer\n", zz, 3, i);
else
printf("%06X\t%02X\t\tcp[%04X].tag\t\tCONSTANT_float\n", zz, 4, i);
zz++; j=((ccc *)p[i].info)->x1;
printf("%06X\t%04X\t\tcp[%04X].bytes\n\n", zz, j, i);
zz+=4;
break;
case 5 :
case 6 :
if(p[i].tag==5)
printf("%06X\t%02X\t\tcp[%04X].tag\t\tCONSTANT_long\n", zz, 5, i);
else
printf("%06X\t%02X\t\tcp[%04X].tag\t\tCONSTANT_long\n", zz, 6, i);
zz++; j=((ccc *)p[i].info)->x1;
printf("%06X\t%04X\t\tcp[%04X].high_bytes\n\n", zz, j, i);
zz+=4; j=((ccc *)p[i].info)->x1;
printf("%06X\t%04X\t\tcp[%04X].low_bytes\n\n", zz, j, i);
zz+=4;
break;
case 7 :
printf("%06X\t%02X\t\tcp[%04X].tag\t\tCONSTANT_Class\n", zz, 7, i);
zz++; j=((aaa *)p[i].info)->x1;
printf("%06X\t%04X\t\tcp[%04X].name_index\t%s\n\n", zz, j, i, get(j));
zz+=2;
break;
case 8 :
printf("%06X\t%02X\t\tcp[%04X].tag\t\tCONSTANT_Class\n", zz, 8, i);
zz++; j=((aaa *)p[i].info)->x1;
printf("%06X\t%04X\t\tcp[%04X].string_index\t%s\n\n", zz, j, i, get(j));
zz+=2;
break;
case 9 :
case 10:
case 11:
if(p[i].tag==9)
printf("%06X\t%02X\t\tcp[%04X].tag\t\tCONSTANT_Fieldref\n", zz, 9, i);
else if(p[i].tag==10)
printf("%06X\t%02X\t\tcp[%04X].tag\t\tCONSTANT_Methodref\n", zz, 10, i);
else
printf("%06X\t%02X\t\tcp[%04X].tag\t\tCONSTANT_InterfaceMethodref\n", zz, 11, i);
zz++; j=((aaa *)p[i].info)->x1;
printf("%06X\t%04X\t\tcp[%04X].class_index\t%s\n", zz, j, i, get(j));
zz+=2; j=((aaa *)p[i].info)->x2;
printf("%06X\t%04X\t\tcp[%04X].name_&_type_index\t%s,%s\n\n", zz, j, i,
get( j), get( j, 2));
zz+=2;
break;
case 12:
printf("%06X\t%02X\tcp[%04X].tag\t\tCONSTANT_NameAndType\n", zz, 12, i);
zz++; j=((aaa *)p[i].info)->x1;
printf("%06X\t%04X\tcp[%04X].name_index\t%s\n", zz, j, i, get(j));
zz+=2; j=((aaa *)p[i].info)->x2;
printf("%06X\t%04X\tcp[%04X].descriptor_index\t%s\n\n", zz, j, i, get(j));
zz+=2;
break;
}
}
printf("*** jvm7 D5 Class/Interface Fields Pool ***\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
zz=offset[4]+2;
for(i=0; i<fi.field_c; i++)
{
strcpy(aa, get(fld[i].dindex));
strcpy(bb, rtype(&aa));
printf("%s %s\n", bb,get(fld[i].name));
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("offset\tBytes\tMethod[%06X]\t\tMeaning\n", i);
printf("~~~~~~~\t~~~~~~\t~~~~~~~~~~~~~~~~~\t~~~~~~~~~~~~~~\n");
printf("%06X\t%04X\taccess_flags\n", zz, fld[i].a_flag);
printf("%06X\t%04X\tname_index\t\t%s\n", zz+=2, fld[i].name,get(fld[i].name));
printf("%06X\t%04X\tdescriptor_index\t%s\n", zz+=2, fld[i].dindex, get(fld[i].dindex));
printf("%06X\t%04X\tattribute_count\n\n", zz+=2, fld[i].attr_c);
zz+=((cvattr *)fld[i].attr_i)->len+8;
}
printf("*** jvm7 D6 Class/Interface Methods Pool ***\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
zz=offset[5]+2;
for(i=0; i<fi.meth_c; i++)
{
char *sign = new char[100];
sign=get(mth[i].sign);
strcpy(bb,signat(&sign));
sign++;
strcpy(aa, rtype(&sign));
printf("%s ",aa);
strcpy(aa, get(mth[i].name));
printf("%s%s\n",aa, bb);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("offset\tBytes\tMethod[%06X]\t\tMeaning\n", i);
printf("~~~~~~~\t~~~~~~\t~~~~~~~~~~~~~~~~~\t~~~~~~~~~~~~~~\n");
printf("%06X\t%04X\taccess_flags\n", zz, mth[i].a_flag);
printf("%06X\t%04X\tname_index\t\t%s\n", zz+=2, mth[i].name,get(mth[i].name));
printf("%06X\t%04X\tdescriptor_index\t%s\n", zz+=2, mth[i].sign, get(mth[i].sign));
printf("%06X\t%04X\tattribute_count\n", zz+=2, mth[i].attr_c);
for(j=0; j<mth[i].attr_c; j++)
{
printf("%06X\t%04X\tattribute_name_index %s\n", zz+=2, mth[i].mthattr[j].name,get(mth[i].mthattr[j].name));
printf("%06X\t%06X\tattribute_length\n\n", zz+=2, mth[i].mthattr[j].len);
zz+=mth[i].mthattr[j].len+4;
}
}
printf("*** jvm7 D7 Class/Interface Attributes Pool ***\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
zz=offset[6]+2;
for(i=0; i<fi.attr_c; i++)
{
printf("offset\tBytes\tAttributes[%04X]\tMeaning\n", i);
printf("~~~~~~~\t~~~~~~\t~~~~~~~~~~~~~~~~~\t~~~~~~~~~~~~~~\n");
printf("%06X\t%04X\tATTRIBUTE_name_index %s\n",zz, fi.fiattr[i].name, get(fi.fiattr[i].name));
printf("%06X\t%06X\tattribute_length\n\n", zz+=2, fi.fiattr[i].len);
zz+=fi.fiattr[i].len+4;
}
return 0;
}
char* signat(char **ss)
{
char *sign=new char[150];
strcpy(sign,"(");
*ss = *ss+1;
while(**ss != ')')
{
strcat(sign, rtype(ss));
*ss = *ss+1;
if( **ss != ')')
strcat(sign, ",");
}
strcat(sign, ")");
return sign;
}
char* rtype( char **ss ) //Return type & arg
{
char *aa=new char[20]; int i;
switch(**ss)
{
case 'I' : strcpy(aa, "int"); break;
case 'V' : strcpy(aa, "void"); break;
case 'D' : strcpy(aa, "double"); break;
case 'L' :
*ss = *ss+1; i=0;
while(**ss != ';')
{ if(**ss == '/') i=0;
else { aa[i]=**ss; i++; }
*ss = *ss+1;
}
aa[i]='\0';
break;
case 'S' : strcpy(aa, "short"); break;
case 'B' : strcpy(aa, "byte"); break;
case 'F' : strcpy(aa, "float"); break;
}
return aa;
}
clvue.exe
//Examples
//Created by Microsoft SDK
Êþº¾ - ' Code
SourceFile
ConstantValue
Exceptions COM_Class_Type COM_ExposedAs_Group
COM_ProxiesTo
COM_MapsTo COM_GuidPool COM_MethodPool CPlotter java/lang/Object
com/ms/com/_Guid ïú!â (ISSBBBBBBBB)V <init>
Lcom/ms/com/_Guid; clsid ()V
com/ms/com/IUnknown com/ms/com/NoAutoScripting IPlotter !
CPlotter.java DrawLine #(Ljava/awt/Point;Ljava/awt/Point;)V <clinit> " $ % ÿÿ & -
!» Yi(пüª<ýü· ³ ± *· ± # â!úï(iпü ª <ýü
Created by Microsoft SDK
Êþº¾ - # Code
SourceFile
ConstantValue
Exceptions COM_Class_Type COM_ExposedAs_Group
COM_ProxiesTo
COM_MapsTo COM_GuidPool COM_MethodPool IPlotter java/lang/Object
PointMarshaler com/ms/com/_Guid ïú!á (ISSBBBBBBBB)V <init>
Lcom/ms/com/_Guid; iid com/ms/com/IUnknown
IPlotter.java DrawLine #(Ljava/awt/Point;Ljava/awt/Point;)V <clinit> ()V ! " -
!» Yi(пüª<ýü· ³ ± á!úï(iпü ª <ýü
ÿÿ
//Output generated by Microsoft Classvue package
//output directed from the console in this files
*** ClassVue D1 Class/Interface Overview *** Variable Name Value Reported ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Class Name CPlotter Size 640 bytes Version 45.03 Access Flags public final Super Class Name java.lang.Object Interface(s) com.ms.com.IUnknown, com.ms.com.NoAutoScripting, IPlotter Source Filename CPlotter.java Debug Information NO ActiveX Controls YES *** ClassVue D2 Class/Interface Methods, Fields, and Classes *** Methods (Invoked) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void com.ms.com._Guid.<init>(int,short,short,byte,byte,byte,byte,byte,byte,byte,byte) void java.lang.Object.<init>() Methods (Interfaced) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * None Interfaced in this Class/Interface * Fields (Accessed and/or Modified) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _Guid CPlotter.clsid Methods (Explicitly Declared by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Method[0001] static void <clinit>() Method[0002] public void <init>() Method[0000] public native void DrawLine(Point,Point) Fields (Explicitly Declared by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Field[0000] public static final _Guid clsid Classes (Accessed by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CPlotter IPlotter com.ms.com.IUnknown com.ms.com.NoAutoScripting java.lang.Object com.ms.com._Guid COM_Guid's (Explicitly Declared by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EFFA21E2-6928-11D0-BFFC-00AA003CFDFC COM_Methods (Explicitly Declared by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *** ClassVue D3 Class/Interface Root Data Structures *** Offset Bytes Field Name Meaning ~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 000000 CAFEBABE ClassFile.magic 000004 0003 ClassFile.minor_version Decimal (3) 000006 002D ClassFile.major_version Decimal (45) 000008 0027 ClassFile.constant_pool_count Decimal (39) 00000A ClassFile.constant_pool cp (see D4) 0001CC 0011 ClassFile.access_flags "public final" 0001CE 000C ClassFile.this_class "CPlotter" 0001D0 000E ClassFile.super_class "java.lang.Object" 0001D2 0003 ClassFile.interfaces_count Decimal (3) 0001D4 ClassFile.interfaces interfaces 0001DA 0001 ClassFile.fields_count Decimal (1) 0001DC ClassFile.fields fields (see D5) 0001E4 0003 ClassFile.methods_count Decimal (3) 0001E6 ClassFile.methods methods (see D6) 000252 0003 ClassFile.attributes_count Decimal (3) 000254 ClassFile.attributes attributes (see D7) *** ClassVue D4 - Class/Interface Constant Pool *** Offset Bytes Field Name Meaning ~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 00000A 01 cp[0001].tag CONSTANT_Utf8 00000B 0004 cp[0001].length 00000D cp[0001].bytes "Code" 000011 01 cp[0002].tag CONSTANT_Utf8 000012 000A cp[0002].length 000014 cp[0002].bytes "SourceFile" 00001E 01 cp[0003].tag CONSTANT_Utf8 00001F 000D cp[0003].length 000021 cp[0003].bytes "ConstantValue" 00002E 01 cp[0004].tag CONSTANT_Utf8 00002F 000A cp[0004].length 000031 cp[0004].bytes "Exceptions" 00003B 01 cp[0005].tag CONSTANT_Utf8 00003C 000E cp[0005].length 00003E cp[0005].bytes "COM_Class_Type" 00004C 01 cp[0006].tag CONSTANT_Utf8 00004D 0013 cp[0006].length 00004F cp[0006].bytes "COM_ExposedAs_Group" 000062 01 cp[0007].tag CONSTANT_Utf8 000063 000D cp[0007].length 000065 cp[0007].bytes "COM_ProxiesTo" 000072 01 cp[0008].tag CONSTANT_Utf8 000073 000A cp[0008].length 000075 cp[0008].bytes "COM_MapsTo" 00007F 01 cp[0009].tag CONSTANT_Utf8 000080 000C cp[0009].length 000082 cp[0009].bytes "COM_GuidPool" 00008E 01 cp[000A].tag CONSTANT_Utf8 00008F 000E cp[000A].length 000091 cp[000A].bytes "COM_MethodPool" 00009F 01 cp[000B].tag CONSTANT_Utf8 0000A0 0008 cp[000B].length 0000A2 cp[000B].bytes "CPlotter" 0000AA 07 cp[000C].tag CONSTANT_Class 0000AB 000B cp[000C].name_index "CPlotter" 0000AD 01 cp[000D].tag CONSTANT_Utf8 0000AE 0010 cp[000D].length 0000B0 cp[000D].bytes "java/lang/Object" 0000C0 07 cp[000E].tag CONSTANT_Class 0000C1 000D cp[000E].name_index "java.lang.Object" 0000C3 01 cp[000F].tag CONSTANT_Utf8 0000C4 0010 cp[000F].length 0000C6 cp[000F].bytes "com/ms/com/_Guid" 0000D6 07 cp[0010].tag CONSTANT_Class 0000D7 000F cp[0010].name_index "com.ms.com._Guid" 0000D9 03 cp[0011].tag CONSTANT_Integer 0000DA EFFA21E2 cp[0011].bytes "-268819998" 0000DE 01 cp[0012].tag CONSTANT_Utf8 0000DF 000E cp[0012].length 0000E1 cp[0012].bytes "(ISSBBBBBBBB)V" 0000EF 01 cp[0013].tag CONSTANT_Utf8 0000F0 0006 cp[0013].length 0000F2 cp[0013].bytes "<init>" 0000F8 0C cp[0014].tag CONSTANT_NameAndType 0000F9 0013 cp[0014].name_index "<init>" 0000FB 0012 cp[0014].descriptor_index "(ISSBBBBBBBB)V" 0000FD 0A cp[0015].tag CONSTANT_Methodref 0000FE 0010 cp[0015].class_index "com.ms.com._Guid" 000100 0014 cp[0015].name_and_type_index "<init>","(ISSBBBBBBBB)V" 000102 01 cp[0016].tag CONSTANT_Utf8 000103 0012 cp[0016].length 000105 cp[0016].bytes "Lcom/ms/com/_Guid;" 000117 01 cp[0017].tag CONSTANT_Utf8 000118 0005 cp[0017].length 00011A cp[0017].bytes "clsid" 00011F 0C cp[0018].tag CONSTANT_NameAndType 000120 0017 cp[0018].name_index "clsid" 000122 0016 cp[0018].descriptor_index "Lcom.ms.com._Guid;" 000124 09 cp[0019].tag CONSTANT_Fieldref 000125 000C cp[0019].class_index "CPlotter" 000127 0018 cp[0019].name_and_type_index "clsid","Lcom.ms.com._Guid;" 000129 01 cp[001A].tag CONSTANT_Utf8 00012A 0003 cp[001A].length 00012C cp[001A].bytes "()V" 00012F 0C cp[001B].tag CONSTANT_NameAndType 000130 0013 cp[001B].name_index "<init>" 000132 001A cp[001B].descriptor_index "()V" 000134 0A cp[001C].tag CONSTANT_Methodref 000135 000E cp[001C].class_index "java.lang.Object" 000137 001B cp[001C].name_and_type_index "<init>","()V" 000139 01 cp[001D].tag CONSTANT_Utf8 00013A 0013 cp[001D].length 00013C cp[001D].bytes "com/ms/com/IUnknown" 00014F 07 cp[001E].tag CONSTANT_Class 000150 001D cp[001E].name_index "com.ms.com.IUnknown" 000152 01 cp[001F].tag CONSTANT_Utf8 000153 001A cp[001F].length 000155 cp[001F].bytes "com/ms/com/NoAutoScripting" 00016F 07 cp[0020].tag CONSTANT_Class 000170 001F cp[0020].name_index "com.ms.com.NoAutoScripting" 000172 01 cp[0021].tag CONSTANT_Utf8 000173 0008 cp[0021].length 000175 cp[0021].bytes "IPlotter" 00017D 07 cp[0022].tag CONSTANT_Class 00017E 0021 cp[0022].name_index "IPlotter" 000180 01 cp[0023].tag CONSTANT_Utf8 000181 000D cp[0023].length 000183 cp[0023].bytes "CPlotter.java" 000190 01 cp[0024].tag CONSTANT_Utf8 000191 0008 cp[0024].length 000193 cp[0024].bytes "DrawLine" 00019B 01 cp[0025].tag CONSTANT_Utf8 00019C 0023 cp[0025].length 00019E cp[0025].bytes "(Ljava/awt/Point;Ljava/awt/Point;)V" 0001C1 01 cp[0026].tag CONSTANT_Utf8 0001C2 0008 cp[0026].length 0001C4 cp[0026].bytes "<clinit>" *** ClassVue D5 - Class/Interface Fields Pool *** public static final _Guid clsid ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Offset Bytes Field[0000] Meaning ~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 0001DC 0019 access_flags "public static final" 0001DE 0017 name_index "clsid" 0001E0 0016 descriptor_index "Lcom.ms.com._Guid;" 0001E2 0000 attributes_count *** ClassVue D6 - Class/Interface Methods Pool *** public native void DrawLine(Point,Point) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Offset Bytes Method[0000] Meaning ~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 0001E6 0101 access_flags "public native" 0001E8 0024 name_index "DrawLine" 0001EA 0025 descriptor_index "(Ljava.awt.Point;Ljava.awt.Point;)V" 0001EC 0001 attributes_count 0001EE 0007 ATTRIBUTE_name_index ________ "COM_ProxiesTo" 0001F0 00000004 attribute_length static void <clinit>() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Offset Bytes Method[0001] Meaning ~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 0001F8 0008 access_flags "static" 0001FA 0026 name_index "<clinit>" 0001FC 001A descriptor_index "()V" 0001FE 0001 attributes_count 000200 0001 ATTRIBUTE_name_index ________ "Code" 000202 0000002D attribute_length 000231 0000 attributes_count public void <init>() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Offset Bytes Method[0002] Meaning ~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 000233 0001 access_flags "public" 000235 0013 name_index "<init>" 000237 001A descriptor_index "()V" 000239 0001 attributes_count 00023B 0001 ATTRIBUTE_name_index ________ "Code" 00023D 00000011 attribute_length 000250 0000 attributes_count *** ClassVue D7 - Class/Interface Attributes Pool *** Offset Bytes Attribute[0000] Meaning ~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 000254 0002 ATTRIBUTE_name_index ________ "SourceFile" 000256 00000002 attribute_length Offset Bytes Attribute[0001] Meaning ~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 00025C 0005 ATTRIBUTE_name_index ________ "COM_Class_Type" 00025E 00000006 attribute_length Offset Bytes Attribute[0002] Meaning ~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 000268 0009 ATTRIBUTE_name_index ________ "COM_GuidPool" 00026A 00000012 attribute_length
*** ClassVue D1 Class/Interface Overview *** Variable Name Value Reported ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Class Name IPlotter Size 601 bytes Version 45.03 Access Flags public interface Super Class Name java.lang.Object Interface(s) com.ms.com.IUnknown Source Filename IPlotter.java Debug Information NO ActiveX Controls YES *** ClassVue D2 Class/Interface Methods, Fields, and Classes *** Methods (Invoked) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void com.ms.com._Guid.<init>(int,short,short,byte,byte,byte,byte,byte,byte,byte,byte) Methods (Interfaced) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * None Interfaced in this Class/Interface * Fields (Accessed and/or Modified) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _Guid IPlotter.iid Methods (Explicitly Declared by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Method[0001] static void <clinit>() Method[0000] public abstract void DrawLine(Point,Point) Fields (Explicitly Declared by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Field[0000] public static final _Guid iid Classes (Accessed by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IPlotter com.ms.com.IUnknown java.lang.Object PointMarshaler com.ms.com._Guid COM_Guid's (Explicitly Declared by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EFFA21E1-6928-11D0-BFFC-00AA003CFDFC COM_Methods (Explicitly Declared by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ java.lang.ArrayIndexOutOfBoundsException: 17
*** jvm7 D1 Class/Interface Overview *** Variable Name Value Reported ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ Class Name IPlotter Size 601 Version 45.03 Access Flags Super Class Name java/lang/Object Interface(s) com/ms/com/IUnknown, Source Filename IPlotter.java Debug Information NO ActiveX Controls YES *** jvm7 D2 Class/Interface Methods, Fields, & Classes *** Methods (Invoked) ~~~~~~~~~~~~~~~~~~~~~~~~~~ void com/ms/com/_Guid.<init>(int,short,short,byte,byte,byte,byte,byte,byte,byte,byte) Methods (Interfaced) ~~~~~~~~~~~~~~~~~~~~~~~~~~ * NA * Fields (Accessed and/or Modified) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _Guid iid Methods (Explicitely Declared by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Method[0000] void DrawLine(Point,Point) Method[0001] void <clinit>() Fields (Explicitely Declared by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * NA * Classes (Accessed by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IPlotter java/lang/Object PointMarshaler com/ms/com/_Guid com/ms/com/IUnknown COM_Guid's (Explicitly Declared by this Class/Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EFFA21E1-6928-11D0-BFFC0AA03CFDFC *** jvm7 D3 Class/Interface Root Data Structures *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ offset Bytes Field Name Meaning ~~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~~ 000000 CAFEBABE ClassFile.magic 000004 0003 ClassFile.minor_version Decimal (3) 000006 002D ClassFile.major_version Decimal (45) 000008 0023 ClassFile.constant_pool_count Decimal (35) 00000A ClassFile.Constant_pool cp 0001A6 0201 ClassFile.access_flags 0001A8 000C ClassFile.this_class IPlotter 0001AA 000E ClassFile.super_class java/lang/Object 0001AC 0001 ClassFile.interfaces_count Decimal (1) 0001AE ClassFile.interfaces interfaces 0001B0 0001 ClassFile.fields_count Decimal (1) 0001B2 ClassFile.fields fields 0001BA 0002 ClassFile.fields Decimal (2) 0001BC ClassFile.fields Methods 000217 0003 ClassFile.methods_count Decimal (3) 000219 ClassFile.methods attributes *** jvm7 D3 Class/Interface Root Data Structures *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ offset Bytes Field Name Meaning ~~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~~ 00000A 01 cp[0001].tag CONSTANT_Utf8 00000B 0004 cp[0001].length 00000D cp[0001].bytes Code 000011 01 cp[0002].tag CONSTANT_Utf8 000012 000A cp[0002].length 000014 cp[0002].bytes SourceFile 00001E 01 cp[0003].tag CONSTANT_Utf8 00001F 000D cp[0003].length 000021 cp[0003].bytes ConstantValue 00002E 01 cp[0004].tag CONSTANT_Utf8 00002F 000A cp[0004].length 000031 cp[0004].bytes Exceptions 00003B 01 cp[0005].tag CONSTANT_Utf8 00003C 000E cp[0005].length 00003E cp[0005].bytes COM_Class_Type 00004C 01 cp[0006].tag CONSTANT_Utf8 00004D 0013 cp[0006].length 00004F cp[0006].bytes COM_ExposedAs_Group 000062 01 cp[0007].tag CONSTANT_Utf8 000063 000D cp[0007].length 000065 cp[0007].bytes COM_ProxiesTo 000072 01 cp[0008].tag CONSTANT_Utf8 000073 000A cp[0008].length 000075 cp[0008].bytes COM_MapsTo 00007F 01 cp[0009].tag CONSTANT_Utf8 000080 000C cp[0009].length 000082 cp[0009].bytes COM_GuidPool 00008E 01 cp[000A].tag CONSTANT_Utf8 00008F 000E cp[000A].length 000091 cp[000A].bytes COM_MethodPool 00009F 01 cp[000B].tag CONSTANT_Utf8 0000A0 0008 cp[000B].length 0000A2 cp[000B].bytes IPlotter 0000AA 07 cp[000C].tag CONSTANT_Class 0000AB 000B cp[000C].name_index IPlotter 0000AD 01 cp[000D].tag CONSTANT_Utf8 0000AE 0010 cp[000D].length 0000B0 cp[000D].bytes java/lang/Object 0000C0 07 cp[000E].tag CONSTANT_Class 0000C1 000D cp[000E].name_index java/lang/Object 0000C3 01 cp[000F].tag CONSTANT_Utf8 0000C4 000E cp[000F].length 0000C6 cp[000F].bytes PointMarshaler 0000D4 07 cp[0010].tag CONSTANT_Class 0000D5 000F cp[0010].name_index PointMarshaler 0000D7 01 cp[0011].tag CONSTANT_Utf8 0000D8 0010 cp[0011].length 0000DA cp[0011].bytes com/ms/com/_Guid 0000EA 07 cp[0012].tag CONSTANT_Class 0000EB 0011 cp[0012].name_index com/ms/com/_Guid 0000ED 03 cp[0013].tag CONSTANT_integer 0000EE 20E1 cp[0013].bytes 0000F2 01 cp[0014].tag CONSTANT_Utf8 0000F3 000E cp[0014].length 0000F5 cp[0014].bytes (ISSBBBBBBBB)V 000103 01 cp[0015].tag CONSTANT_Utf8 000104 0006 cp[0015].length 000106 cp[0015].bytes <init> 00010C 0C cp[0016].tag CONSTANT_NameAndType 00010D 0015 cp[0016].name_index <init> 00010F 0014 cp[0016].descriptor_index (ISSBBBBBBBB)V 000111 0A cp[0017].tag CONSTANT_Methodref 000112 0012 cp[0017].class_index com/ms/com/_Guid 000114 0016 cp[0017].name_&_type_index <init>,(ISSBBBBBBBB)V 000116 01 cp[0018].tag CONSTANT_Utf8 000117 0012 cp[0018].length 000119 cp[0018].bytes Lcom/ms/com/_Guid; 00012B 01 cp[0019].tag CONSTANT_Utf8 00012C 0003 cp[0019].length 00012E cp[0019].bytes iid 000131 0C cp[001A].tag CONSTANT_NameAndType 000132 0019 cp[001A].name_index iid 000134 0018 cp[001A].descriptor_index Lcom/ms/com/_Guid; 000136 09 cp[001B].tag CONSTANT_Fieldref 000137 000C cp[001B].class_index IPlotter 000139 001A cp[001B].name_&_type_index iid,Lcom/ms/com/_Guid; 00013B 01 cp[001C].tag CONSTANT_Utf8 00013C 0013 cp[001C].length 00013E cp[001C].bytes com/ms/com/IUnknown 000151 07 cp[001D].tag CONSTANT_Class 000152 001C cp[001D].name_index com/ms/com/IUnknown 000154 01 cp[001E].tag CONSTANT_Utf8 000155 000D cp[001E].length 000157 cp[001E].bytes IPlotter.java 000164 01 cp[001F].tag CONSTANT_Utf8 000165 0008 cp[001F].length 000167 cp[001F].bytes DrawLine 00016F 01 cp[0020].tag CONSTANT_Utf8 000170 0023 cp[0020].length 000172 cp[0020].bytes (Ljava/awt/Point;Ljava/awt/Point;)V 000195 01 cp[0021].tag CONSTANT_Utf8 000196 0008 cp[0021].length 000198 cp[0021].bytes <clinit> 0001A0 01 cp[0022].tag CONSTANT_Utf8 0001A1 0003 cp[0022].length 0001A3 cp[0022].bytes ()V *** jvm7 D5 Class/Interface Fields Pool *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _Guid iid ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ offset Bytes Method[000000] Meaning ~~~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ 0001B2 0019 access_flags 0001B4 0019 name_index iid 0001B6 0018 descriptor_index Lcom/ms/com/_Guid; 0001B8 0000 attribute_count *** jvm7 D6 Class/Interface Methods Pool *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void DrawLine(Point,Point) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ offset Bytes Method[000000] Meaning ~~~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ 0001BC 0401 access_flags 0001BE 001F name_index DrawLine 0001C0 0020 descriptor_index (Ljava/awt/Point;Ljava/awt/Point;)V 0001C2 0002 attribute_count 0001C4 0007 attribute_name_index COM_ProxiesTo 0001C6 000004 attribute_length 0001D0 0006 attribute_name_index COM_ExposedAs_Group 0001D2 000008 attribute_length void <clinit>() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ offset Bytes Method[000001] Meaning ~~~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ 0001DE 0008 access_flags 0001E0 0021 name_index <clinit> 0001E2 0022 descriptor_index ()V 0001E4 0001 attribute_count 0001E6 0001 attribute_name_index Code 0001E8 00002D attribute_length *** jvm7 D7 Class/Interface Attributes Pool *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ offset Bytes Attributes[0000] Meaning ~~~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ 000219 0002 ATTRIBUTE_name_index SourceFile 00021B 000002 attribute_length offset Bytes Attributes[0001] Meaning ~~~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ 000221 0009 ATTRIBUTE_name_index COM_GuidPool 000223 000012 attribute_length offset Bytes Attributes[0002] Meaning ~~~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ 000239 000A ATTRIBUTE_name_index COM_MethodPool 00023B 00001A attribute_length
//Entry in the constant pool
0=Constant Pool Size=39 1=Code(1) 2=SourceFile(1) 3=ConstantValue(1) 4=Exceptions(1) 5=COM_Class_Type(1) 6=COM_ExposedAs_Group(1) 7=COM_ProxiesTo(1) 8=COM_MapsTo(1) 9=COM_GuidPool(1) 10=COM_MethodPool(1) 11=CPlotter(1) 12=11(7) 13=java/lang/Object(1) 14=13(7) 15=com/ms/com/_Guid(1) 16=15(7) 17=8418(3) 18=(ISSBBBBBBBB)V(1) 19=<init>(1) 20=19..18(12) 21=16..20(10) 22=Lcom/ms/com/_Guid;(1) 23=clsid(1) 24=23..22(12) 25=12..24(9) 26=()V(1) 27=19..26(12) 28=14..27(10) 29=com/ms/com/IUnknown(1) 30=29(7) 31=com/ms/com/NoAutoScripting(1) 32=31(7) 33=IPlotter(1) 34=33(7) 35=CPlotter.java(1) 36=DrawLine(1) 37=(Ljava/awt/Point;Ljava/awt/Point;)V(1) 38=<clinit>(1)
Vijay Mukhi's Computer
Institute
VMCI, B-13, Everest Building, Tardeo, Mumbai 400 034, India
Tel : 91-22-496 4335 /6/7/8/9
Fax : 91-22-307 28 59
e-mail : vmukhi@giasbm01.vsnl.net.in
http://www.vijaymukhi.com