svn path=/trunk/mono/; revision=16


Commit migrated from 0f10ad8249
This commit is contained in:
Miguel de Icaza 2001-06-20 04:39:52 +00:00
parent 404b88f444
commit 1c8e9f58d4
4 changed files with 113 additions and 92 deletions

View File

@ -112,7 +112,7 @@ load_metadata_ptrs (MonoAssembly *assembly, dotnet_image_info_t *iinfo)
{
metadata_t *metadata = &iinfo->dn_metadata;
guint32 offset, size;
guint16 records;
guint16 streams;
int i;
char *ptr;
@ -125,12 +125,7 @@ load_metadata_ptrs (MonoAssembly *assembly, dotnet_image_info_t *iinfo)
ptr = metadata->raw_metadata;
/*
* Handle Beta 1 and ECMA versions of the metadata root
*/
if (strncmp (ptr, "COM+", 4) == 0){
ptr += 10;
} else if (strncmp (ptr, "BSJB", 4) == 0){
if (strncmp (ptr, "BSJB", 4) == 0){
guint32 version_string_len;
ptr += 12;
@ -139,15 +134,16 @@ load_metadata_ptrs (MonoAssembly *assembly, dotnet_image_info_t *iinfo)
ptr += version_string_len;
if (((guint32) ptr) % 4)
ptr += 4 - (((guint32) ptr) %4);
}
} else
return FALSE;
/* skip over flags */
ptr += 2;
records = read16 (ptr);
streams = read16 (ptr);
ptr += 2;
for (i = 0; i < records; i++){
for (i = 0; i < streams; i++){
if (strncmp (ptr + 8, "#~", 3) == 0){
metadata->heap_tables.sh_offset = read32 (ptr);
metadata->heap_tables.sh_size = read32 (ptr + 4);

View File

@ -23,7 +23,8 @@
* Aliased table for example is `CustomAttributeType' which depending on the
* information might refer to different tables.
*/
static MonoMetaTable AssemblyTable [] = {
static MonoMetaTable AssemblySchema [] = {
{ MONO_MT_UINT32, "HashId" },
{ MONO_MT_UINT16, "Major" },
{ MONO_MT_UINT16, "Minor" },
@ -36,19 +37,19 @@ static MonoMetaTable AssemblyTable [] = {
{ MONO_MT_END, NULL }
};
static MonoMetaTable AssemblyOSTable [] = {
static MonoMetaTable AssemblyOSSchema [] = {
{ MONO_MT_UINT32, "OSPlatformID" },
{ MONO_MT_UINT32, "OSMajor" },
{ MONO_MT_UINT32, "OSMinor" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable AssemblyProcessorTable [] = {
static MonoMetaTable AssemblyProcessorSchema [] = {
{ MONO_MT_UINT32, "Processor" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable AssemblyRefTable [] = {
static MonoMetaTable AssemblyRefSchema [] = {
{ MONO_MT_UINT16, "Major" },
{ MONO_MT_UINT16, "Minor" },
{ MONO_MT_UINT16, "Build" },
@ -61,7 +62,7 @@ static MonoMetaTable AssemblyRefTable [] = {
{ MONO_MT_END, NULL }
};
static MonoMetaTable AssemblyRefOSTable [] = {
static MonoMetaTable AssemblyRefOSSchema [] = {
{ MONO_MT_UINT32, "OSPlatformID" },
{ MONO_MT_UINT32, "OSMajorVersion" },
{ MONO_MT_UINT32, "OSMinorVersion" },
@ -69,55 +70,55 @@ static MonoMetaTable AssemblyRefOSTable [] = {
{ MONO_MT_END, NULL }
};
static MonoMetaTable AssemblyRefProcessorTable [] = {
static MonoMetaTable AssemblyRefProcessorSchema [] = {
{ MONO_MT_UINT32, "Processor" },
{ MONO_MT_TABLE_IDX, "AssemblyRef:AssemblyRef" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable ClassLayoutTable [] = {
static MonoMetaTable ClassLayoutSchema [] = {
{ MONO_MT_UINT16, "PackingSize" },
{ MONO_MT_UINT32, "ClassSize" },
{ MONO_MT_TABLE_IDX, "Parent:TypeDef" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable ConstantTable [] = {
static MonoMetaTable ConstantSchema [] = {
{ MONO_MT_UINT8, "Type" },
{ MONO_MT_UINT8, "PaddingZero" },
{ MONO_MT_TABLE_IDX, "Parent" },
{ MONO_MT_CONST_IDX, "Parent" },
{ MONO_MT_BLOB_IDX, "Value" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable CustomAttributeTable [] = {
static MonoMetaTable CustomAttributeSchema [] = {
{ MONO_MT_TABLE_IDX, "Parent" },
{ MONO_MT_TABLE_IDX, "Type=CustomAttributeType" },
{ MONO_MT_BLOB_IDX, "Value" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable DeclSecurityTable [] = {
static MonoMetaTable DeclSecuritySchema [] = {
{ MONO_MT_UINT16, "Action" },
{ MONO_MT_TABLE_IDX, "Parent=HasDeclSecurity" },
{ MONO_MT_BLOB_IDX, "PermissionSet" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable EventMapTable [] = {
static MonoMetaTable EventMapSchema [] = {
{ MONO_MT_TABLE_IDX, "Parent:TypeDef" },
{ MONO_MT_TABLE_IDX, "EventList:Event" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable EventTable [] = {
static MonoMetaTable EventSchema [] = {
{ MONO_MT_UINT16, "EventFlags#EventAttribute" },
{ MONO_MT_STRING_IDX, "Name" },
{ MONO_MT_TABLE_IDX, "EventType" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable ExportedTypeTable [] = {
static MonoMetaTable ExportedTypeSchema [] = {
{ MONO_MT_UINT32, "Flags" },
{ MONO_MT_TABLE_IDX, "TypeDefId" },
{ MONO_MT_STRING_IDX, "TypeName" },
@ -126,37 +127,37 @@ static MonoMetaTable ExportedTypeTable [] = {
{ MONO_MT_END, NULL }
};
static MonoMetaTable FieldTable [] = {
static MonoMetaTable FieldSchema [] = {
{ MONO_MT_UINT16, "Flags" },
{ MONO_MT_STRING_IDX, "Name" },
{ MONO_MT_BLOB_IDX, "Signature" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable FieldLayoutTable [] = {
static MonoMetaTable FieldLayoutSchema [] = {
{ MONO_MT_UINT32, "Offset" },
{ MONO_MT_TABLE_IDX, "Field:Field" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable FieldMarshalTable [] = {
static MonoMetaTable FieldMarshalSchema [] = {
{ MONO_MT_TABLE_IDX, "Parent" },
{ MONO_MT_BLOB_IDX, "NativeType" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable FieldRVATable [] = {
static MonoMetaTable FieldRVASchema [] = {
{ MONO_MT_UINT32, "RVA" },
{ MONO_MT_TABLE_IDX, "Field:Field" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable FileTable [] = {
static MonoMetaTable FileSchema [] = {
{ MONO_MT_UINT32, "Flags" },
{ MONO_MT_STRING_IDX, "Name" },
{ MONO_MT_BLOB_IDX, "Value" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable ImplMapTable [] = {
static MonoMetaTable ImplMapSchema [] = {
{ MONO_MT_UINT16, "MappingFlag" },
{ MONO_MT_TABLE_IDX, "MemberForwarded=MemberForwardedCodedIndex" },
{ MONO_MT_STRING_IDX, "ImportName" },
@ -164,13 +165,13 @@ static MonoMetaTable ImplMapTable [] = {
{ MONO_MT_END, NULL }
};
static MonoMetaTable InterfaceImplTable [] = {
static MonoMetaTable InterfaceImplSchema [] = {
{ MONO_MT_TABLE_IDX, "Class:TypeDef" },
{ MONO_MT_TABLE_IDX, "Interface=TypeDefOrRef" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable ManifestResourceTable [] = {
static MonoMetaTable ManifestResourceSchema [] = {
{ MONO_MT_UINT32, "Offset" },
{ MONO_MT_UINT32, "Flags" },
{ MONO_MT_STRING_IDX, "Name" },
@ -178,14 +179,14 @@ static MonoMetaTable ManifestResourceTable [] = {
{ MONO_MT_END, NULL }
};
static MonoMetaTable MemberRefTable [] = {
static MonoMetaTable MemberRefSchema [] = {
{ MONO_MT_TABLE_IDX, "Class=MemberRefParent" },
{ MONO_MT_STRING_IDX, "Name" },
{ MONO_MT_BLOB_IDX, "Signature" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable MethodTable [] = {
static MonoMetaTable MethodSchema [] = {
{ MONO_MT_UINT32, "RVA" },
{ MONO_MT_UINT16, "ImplFlags#MethodImplAttributes" },
{ MONO_MT_UINT16, "Flags#MethodAttribute" },
@ -195,21 +196,21 @@ static MonoMetaTable MethodTable [] = {
{ MONO_MT_END, NULL }
};
static MonoMetaTable MethodImplTable [] = {
static MonoMetaTable MethodImplSchema [] = {
{ MONO_MT_TABLE_IDX, "Class:TypeDef" },
{ MONO_MT_TABLE_IDX, "MethodBody=MethodDefOrRef" },
{ MONO_MT_TABLE_IDX, "MethodDeclaration=MethodDefOrRef" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable MethodSemanticsTable [] = {
static MonoMetaTable MethodSemanticsSchema [] = {
{ MONO_MT_UINT16, "MethodSemantic" },
{ MONO_MT_TABLE_IDX, "Method:Method" },
{ MONO_MT_TABLE_IDX, "Association=HasSemantic" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable ModuleTable [] = {
static MonoMetaTable ModuleSchema [] = {
{ MONO_MT_UINT16, "Generation" },
{ MONO_MT_STRING_IDX, "Name" },
{ MONO_MT_GUID_IDX, "MVID" },
@ -218,43 +219,43 @@ static MonoMetaTable ModuleTable [] = {
{ MONO_MT_END, NULL }
};
static MonoMetaTable ModuleRefTable [] = {
static MonoMetaTable ModuleRefSchema [] = {
{ MONO_MT_STRING_IDX, "Name" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable NestedClassTable [] = {
static MonoMetaTable NestedClassSchema [] = {
{ MONO_MT_TABLE_IDX, "NestedClass:TypeDef" },
{ MONO_MT_TABLE_IDX, "EnclosingClass:TypeDef" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable ParamTable [] = {
static MonoMetaTable ParamSchema [] = {
{ MONO_MT_UINT16, "Flags" },
{ MONO_MT_UINT16, "Sequence" },
{ MONO_MT_STRING_IDX, "Name" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable PropertyTable [] = {
static MonoMetaTable PropertySchema [] = {
{ MONO_MT_UINT16, "Flags" },
{ MONO_MT_STRING_IDX, "Name" },
{ MONO_MT_BLOB_IDX, "Type" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable PropertyMapTable [] = {
static MonoMetaTable PropertyMapSchema [] = {
{ MONO_MT_TABLE_IDX, "Parent:TypeDef" },
{ MONO_MT_TABLE_IDX, "PropertyList:Property" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable StandaloneSigTable [] = {
static MonoMetaTable StandaloneSigSchema [] = {
{ MONO_MT_BLOB_IDX, "Signature" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable TypeDefTable [] = {
static MonoMetaTable TypeDefSchema [] = {
{ MONO_MT_UINT32, "Flags" },
{ MONO_MT_STRING_IDX, "Name" },
{ MONO_MT_STRING_IDX, "Namespace" },
@ -264,14 +265,14 @@ static MonoMetaTable TypeDefTable [] = {
{ MONO_MT_END, NULL }
};
static MonoMetaTable TypeRefTable [] = {
static MonoMetaTable TypeRefSchema [] = {
{ MONO_MT_TABLE_IDX, "ResolutionScope=ResolutionScope" },
{ MONO_MT_STRING_IDX, "Name" },
{ MONO_MT_STRING_IDX, "Namespace" },
{ MONO_MT_END, NULL }
};
static MonoMetaTable TypeSpecTable [] = {
static MonoMetaTable TypeSpecSchema [] = {
{ MONO_MT_BLOB_IDX, "Signature" },
{ MONO_MT_END, NULL }
};
@ -280,50 +281,50 @@ static struct {
MonoMetaTable *table;
const char *name;
} tables [] = {
/* 0 */ { ModuleTable, "Module" },
/* 1 */ { TypeRefTable, "TypeRef" },
/* 2 */ { TypeDefTable, "TypeDef" },
/* 3 */ { NULL, NULL },
/* 4 */ { FieldTable, "Field" },
/* 5 */ { NULL, NULL },
/* 6 */ { MethodTable, "Method" },
/* 7 */ { NULL, NULL },
/* 8 */ { ParamTable, "Param" },
/* 9 */ { InterfaceImplTable, "InterfaceImpl" },
/* A */ { MemberRefTable, "MemberRef" },
/* B */ { ConstantTable, "Constant" },
/* C */ { CustomAttributeTable, "CustomAttribute" },
/* D */ { FieldMarshalTable, "FieldMarshal" },
/* E */ { DeclSecurityTable, "DeclSecurity" },
/* F */ { ClassLayoutTable, "ClassLayout" },
/* 10 */ { FieldLayoutTable, "FieldLayout" },
/* 11 */ { StandaloneSigTable, "StandaloneSig" },
/* 12 */ { EventMapTable, "EventMap" },
/* 13 */ { NULL, NULL },
/* 14 */ { EventTable, "Event" },
/* 15 */ { PropertyMapTable, "PropertyMap" },
/* 16 */ { NULL, NULL },
/* 17 */ { PropertyTable, "PropertyTable" },
/* 18 */ { MethodSemanticsTable, "MethodSemantics" },
/* 19 */ { MethodImplTable, "MethodImpl" },
/* 1A */ { ModuleRefTable, "ModuleRef" },
/* 1B */ { TypeSpecTable, "TypeSpec" },
/* 1C */ { ImplMapTable, "ImplMap" },
/* 1D */ { FieldRVATable, "FieldRVA" },
/* 1E */ { NULL, NULL },
/* 1F */ { NULL, NULL },
/* 20 */ { AssemblyTable, "Assembly" },
/* 21 */ { AssemblyProcessorTable, "AssemblyProcessor" },
/* 22 */ { AssemblyOSTable, "AssemblyOS" },
/* 23 */ { AssemblyRefTable, "AssemblyRef" },
/* 24 */ { AssemblyRefProcessorTable, "AssemblyRefProcessor" },
/* 25 */ { AssemblyRefOSTable, "AssemblyRefOS" },
/* 26 */ { FileTable, "File" },
/* 27 */ { ExportedTypeTable, "ExportedType" },
/* 28 */ { ManifestResourceTable, "ManifestResource" },
/* 29 */ { NestedClassTable, "NestedClass" },
/* 2A */ { NULL, NULL },
/* 2B */ { NULL, NULL },
/* 0 */ { ModuleSchema, "Module" },
/* 1 */ { TypeRefSchema, "TypeRef" },
/* 2 */ { TypeDefSchema, "TypeDef" },
/* 3 */ { NULL, NULL },
/* 4 */ { FieldSchema, "Field" },
/* 5 */ { NULL, NULL },
/* 6 */ { MethodSchema, "Method" },
/* 7 */ { NULL, NULL },
/* 8 */ { ParamSchema, "Param" },
/* 9 */ { InterfaceImplSchema, "InterfaceImpl" },
/* A */ { MemberRefSchema, "MemberRef" },
/* B */ { ConstantSchema, "Constant" },
/* C */ { CustomAttributeSchema, "CustomAttribute" },
/* D */ { FieldMarshalSchema, "FieldMarshal" },
/* E */ { DeclSecuritySchema, "DeclSecurity" },
/* F */ { ClassLayoutSchema, "ClassLayout" },
/* 10 */ { FieldLayoutSchema, "FieldLayout" },
/* 11 */ { StandaloneSigSchema, "StandaloneSig" },
/* 12 */ { EventMapSchema, "EventMap" },
/* 13 */ { NULL, NULL },
/* 14 */ { EventSchema, "Event" },
/* 15 */ { PropertyMapSchema, "PropertyMap" },
/* 16 */ { NULL, NULL },
/* 17 */ { PropertySchema, "PropertyTable" },
/* 18 */ { MethodSemanticsSchema, "MethodSemantics" },
/* 19 */ { MethodImplSchema, "MethodImpl" },
/* 1A */ { ModuleRefSchema, "ModuleRef" },
/* 1B */ { TypeSpecSchema, "TypeSpec" },
/* 1C */ { ImplMapSchema, "ImplMap" },
/* 1D */ { FieldRVASchema, "FieldRVA" },
/* 1E */ { NULL, NULL },
/* 1F */ { NULL, NULL },
/* 20 */ { AssemblySchema, "Assembly" },
/* 21 */ { AssemblyProcessorSchema, "AssemblyProcessor" },
/* 22 */ { AssemblyOSSchema, "AssemblyOS" },
/* 23 */ { AssemblyRefSchema, "AssemblyRef" },
/* 24 */ { AssemblyRefProcessorSchema, "AssemblyRefProcessor" },
/* 25 */ { AssemblyRefOSSchema, "AssemblyRefOS" },
/* 26 */ { FileSchema, "File" },
/* 27 */ { ExportedTypeSchema, "ExportedType" },
/* 28 */ { ManifestResourceSchema, "ManifestResource" },
/* 29 */ { NestedClassSchema, "NestedClass" },
/* 2A */ { NULL, NULL },
/* 2B */ { NULL, NULL },
};
const char *

View File

@ -18,18 +18,31 @@ typedef struct {
enum {
MONO_MT_END,
/* Sized elements */
MONO_MT_UINT32,
MONO_MT_UINT16,
MONO_MT_UINT8,
/* Index into Blob heap */
MONO_MT_BLOB_IDX,
/* Index into String heap */
MONO_MT_STRING_IDX,
/* GUID index */
MONO_MT_GUID_IDX,
/* Pointer into a table */
MONO_MT_TABLE_IDX,
MONO_MT_GUID_IDX
/* Constant:Parent pointer (Param, Field or Property) */
MONO_MT_CONST_IDX,
};
typedef struct {
int code;
char *def;
} MonoMetaTable;
} MonoMetaSchema;
const char *mono_meta_table_name (int table);

View File

@ -216,6 +216,12 @@ dump_metadata_ptrs (dotnet_image_info_t *iinfo)
dsh ("\t GUID", iinfo, &meta->heap_guid);
}
static void
dump_table (metadata_t *meta, int table)
{
}
static void
dump_metadata (dotnet_image_info_t *iinfo)
{
@ -229,6 +235,7 @@ dump_metadata (dotnet_image_info_t *iinfo)
if (meta->rows [table] == 0)
continue;
printf ("Table %s (%d): %d rows\n", mono_meta_table_name (table), table, meta->rows [table]);
dump_table (meta, table);
}
}
@ -270,6 +277,10 @@ main (int argc, char *argv [])
usage ();
assembly = mono_assembly_open (file, NULL);
if (!assembly){
fprintf (stderr, "Can not open assembly %s\n", file);
exit (1);
}
iinfo = assembly->image_info;
dump_dotnet_iinfo (iinfo);