Class View


This program reads a .class file & display its contents.

How to go ahead

Contents Overview

//Source Code

clvue.cpp

#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

clvue.exe

//Examples

//Created by Microsoft SDK

CPlotter.cl

Êþº¾  - ' 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

IPlotter.cl

Êþº¾  - # 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

CPlotter.txt

*** 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





IPlotter.txt

*** 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


IPlotter.vue


*** 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

z.txt

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)



Back to the main page


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