const char *ptr;
int len;
- mono_metadata_decode_row (t, 0, cols, MONO_ASSEMBLY_SIZE);
fprintf (output, "Assembly Table\n");
+ if (!t->rows)
+ return;
+
+ mono_metadata_decode_row (t, 0, cols, MONO_ASSEMBLY_SIZE);
+
fprintf (output, "Name: %s\n", mono_metadata_string_heap (m, cols [MONO_ASSEMBLY_NAME]));
fprintf (output, "Hash Algoritm: 0x%08x\n", cols [MONO_ASSEMBLY_HASH_ALG]);
fprintf (output, "Version: %d.%d.%d.%d\n", cols [MONO_ASSEMBLY_MAJOR_VERSION],
name = mono_metadata_string_heap (m, cols [MONO_MODULE_NAME]);
guid = get_guid (m, cols [MONO_MODULE_MVID]);
fprintf (output, "%d: %s %d %s\n", i + 1, name, cols [MONO_MODULE_MVID], guid);
- }
-
+ }
}
void
return g_strdup (mono_metadata_string_heap (m, cols [MONO_MODULE_NAME]));
}
+char *
+get_moduleref (MonoImage *m, int idx)
+{
+ guint32 cols [MONO_MODULEREF_SIZE];
+
+ mono_metadata_decode_row (&m->tables [MONO_TABLE_MODULEREF], idx - 1, cols, MONO_MODULEREF_SIZE);
+
+ return g_strdup (mono_metadata_string_heap (m, cols [MONO_MODULEREF_NAME]));
+}
+
char *
get_assemblyref (MonoImage *m, int idx)
{
break;
case RESOLTION_SCOPE_MODULEREF: /* ModuleRef */
- ret = g_strdup_printf ("TODO:TypeRef-ModuleRef (%s.%s)", s, t);
+ x = get_moduleref (m, rs_idx);
+ ret = g_strdup_printf ("[.module %s]%s%s%s", x, s, *s ? "." : "", t);
break;
case RESOLTION_SCOPE_ASSEMBLYREF: /*
}
}
+static void
+dis_directive_module (MonoImage *m)
+{
+ MonoTableInfo *t = &m->tables [MONO_TABLE_MODULE];
+ int i;
+
+ for (i = 0; i < t->rows; i++){
+ guint32 cols [MONO_MODULE_SIZE];
+ const char *name;
+ char *guid;
+
+ mono_metadata_decode_row (t, i, cols, MONO_MODULE_SIZE);
+
+ name = mono_metadata_string_heap (m, cols [MONO_MODULE_NAME]);
+ guid = get_guid (m, cols [MONO_MODULE_MVID]);
+ fprintf (output, ".module %s // GUID = %s\n", name, guid);
+ }
+}
+
+static void
+dis_directive_moduleref (MonoImage *m)
+{
+ MonoTableInfo *t = &m->tables [MONO_TABLE_MODULEREF];
+ int i;
+
+ for (i = 0; i < t->rows; i++){
+ guint32 cols [MONO_MODULEREF_SIZE];
+ const char *name;
+
+ mono_metadata_decode_row (t, i, cols, MONO_MODULEREF_SIZE);
+
+ name = mono_metadata_string_heap (m, cols [MONO_MODULEREF_NAME]);
+ fprintf (output, ".module extern %s\n", name);
+ }
+
+}
+
+static void
+dis_directive_file (MonoImage *m)
+{
+ MonoTableInfo *t = &m->tables [MONO_TABLE_FILE];
+ int i, j, len;
+ guint32 entry_point;
+
+ entry_point = mono_image_get_entry_point (m);
+
+ for (i = 0; i < t->rows; i++){
+ guint32 cols [MONO_FILE_SIZE];
+ const char *name, *hash;
+ guint32 token;
+
+ mono_metadata_decode_row (t, i, cols, MONO_FILE_SIZE);
+
+ name = mono_metadata_string_heap (m, cols [MONO_FILE_NAME]);
+
+ hash = mono_metadata_blob_heap (m, cols [MONO_FILE_HASH_VALUE]);
+ len = mono_metadata_decode_blob_size (hash, &hash);
+
+ fprintf (output, ".file %s%s .hash = (", name,
+ cols [MONO_FILE_FLAGS] & FILE_CONTAINS_NO_METADATA ? " nometadata" : "");
+
+ for (j = 0; j < len; ++j)
+ fprintf (output, " %02X", hash [j] & 0xff);
+
+ token = mono_metadata_make_token (MONO_TABLE_FILE, i + 1);
+ fprintf (output, " )%s\n", (token == entry_point) ? " .entrypoint" : "");
+ }
+
+}
+
static map_t visibility_map [] = {
{ TYPE_ATTRIBUTE_NOT_PUBLIC, "private " },
{ TYPE_ATTRIBUTE_PUBLIC, "public " },
dis_directive_assemblyref (img);
dis_directive_assembly (img);
+ dis_directive_file (img);
+ dis_directive_module (img);
+ dis_directive_moduleref (img);
dis_types (img);
dis_data (img);
}