2009-06-01 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / metadata / pedump.c
index cccc88ad1d1f083ee6cef14d94fcbe07b18beaec..6ab39c39f762b819669016dc808c2dab0e776211 100644 (file)
@@ -307,7 +307,7 @@ dump_metadata (MonoImage *meta)
                        mono_meta_table_name (table),
                        meta->tables [table].rows,
                        meta->tables [table].row_size,
-                       meta->tables [table].base - meta->raw_data
+                       (unsigned int)(meta->tables [table].base - meta->raw_data)
                        );
        }
 }
@@ -642,14 +642,25 @@ main (int argc, char *argv [])
                /**/
        }
 
-       if (run_new_metadata_verifier) {
-               mono_verifier_set_mode (MONO_VERIFIER_MODE_VERIFIABLE);
+       if (verify_pe || run_new_metadata_verifier) {
+               mono_install_assembly_load_hook (pedump_assembly_load_hook, NULL);
+               mono_install_assembly_search_hook (pedump_assembly_search_hook, NULL);
+
+               mono_init_version ("pedump", "v2.0.50727");
 
-               mono_init ("pedump");
+               mono_install_assembly_preload_hook (pedump_preload, GUINT_TO_POINTER (FALSE));
 
                mono_marshal_init ();
+               run_new_metadata_verifier = 1;
+       }
+       
+       if (run_new_metadata_verifier) {
+               int res;
+               mono_verifier_set_mode (MONO_VERIFIER_MODE_VERIFIABLE);
 
-               return verify_image_file (file);
+               res = verify_image_file (file);
+               if (res || !verify_code)
+                       return res;
        }
 
        image = mono_image_open (file, NULL);
@@ -662,17 +673,19 @@ main (int argc, char *argv [])
                dump_dotnet_iinfo (image);
        if (verify_pe) {
                MonoAssembly *assembly;
+               MonoImage *image;
+               MonoImageOpenStatus status;
 
-               mono_install_assembly_load_hook (pedump_assembly_load_hook, NULL);
-               mono_install_assembly_search_hook (pedump_assembly_search_hook, NULL);
-
-               mono_init_from_assembly (file, file);
-
-               mono_install_assembly_preload_hook (pedump_preload, GUINT_TO_POINTER (FALSE));
-
-               mono_marshal_init ();
+               mono_verifier_set_mode (verifier_mode);
 
                assembly = mono_assembly_open (file, NULL);
+               /*fake an assembly for netmodules so the verifier works*/
+               if (!assembly && (image = mono_image_open (file, &status)) && image->tables [MONO_TABLE_ASSEMBLY].rows == 0) {
+                       assembly = g_new0 (MonoAssembly, 1);
+                       assembly->in_gac = FALSE;
+                       assembly->image = image;
+                       image->assembly = assembly;
+               }
 
                if (!assembly) {
                        g_print ("Could not open assembly %s\n", file);