https://bugzilla.novell.com/show_bug.cgi?id=379866


           Summary: monodis has problematic behavior when disassembling the
                    moonlight mscorlib
           Product: Mono: Tools
           Version: SVN
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: monodis
        AssignedTo: [email protected]
        ReportedBy: [EMAIL PROTECTED]
         QAContact: [email protected]
          Found By: ---


Using monodis on the 2.1 mscorlib produces:

wberrier:/usr/src/packages/RPMS/x86_64/tmp# monodis --assembly
/usr/lib/mono/2.1/mscorlib.dll
 Assembly Table
 Name:          mscorlib
 Hash Algoritm: 0x00008004
 Version:       2.0.0.0
 Flags:         0x00000001
 PublicKey:     BlobPtr (0x00006334)
         Dump:
 0x00000000: 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 
 Culture:       

Note that the error is the version. It seems to me that monodis doesn't really
load the mscorlib that is passed as an argument, and simply returns the 2.0
mscorlib, that has been initialized because the 2.1 mscorlib has the same
metadata version that the 2.0 one. Using --mscorlib doesn't help.

I've used the following patch to allow explicit choice of the mscorlib using
--runtime, but it seems to me that monodis should simply take whatever it is
passed as an argument.

Index: main.c
===================================================================
--- main.c      (revision 100561)
+++ main.c      (working copy)
 -1832,7 +1832,7 @@
 static void
 usage (void)
 {
-       GString *args = g_string_new ("[--output=filename] [--filter=filename]
[--help] [--mscorlib]\n");
+       GString *args = g_string_new ("[--output=filename] [--filter=filename]
[--runtime=version] [--help] [--mscorlib]\n");
        int i;

        for (i = 0; table_list [i].name != NULL; i++){
 -1853,6 +1853,7 @@
 main (int argc, char *argv [])
 {
        GList *input_files = NULL, *l;
+       char *runtime_version = NULL;
        int i, j;

        output = stdout;
 -1887,6 +1888,9 @@
                        } else if (strcmp (argv [i], "--forward-decls") == 0) {
                                dump_forward_decls = TRUE;
                                continue;
+                       } else if (strncmp (argv [i], "--runtime=", 10) == 0) { 
+                               runtime_version = &argv [i][10];
+                               continue;
                        } else if (strcmp (argv [i], "--help") == 0)
                                usage ();
                        for (j = 0; table_list [j].name != NULL; j++) {
 -1905,19 +1909,27 @@
        mono_install_assembly_load_hook (monodis_assembly_load_hook, NULL);
        mono_install_assembly_search_hook (monodis_assembly_search_hook, NULL);

+       
+
        /*
         * If we just have one file, use the corlib version it requires.
+        * if not runtime_version has been explicitely specified
         */
+       if (runtime_version)
+               mono_init_version (argv [0], runtime_version);
+
        if (!input_files->next) {
                char *filename = input_files->data;

-               mono_init_from_assembly (argv [0], filename);
+               if (!runtime_version)
+                       mono_init_from_assembly (argv [0], filename);

                mono_install_assembly_preload_hook (monodis_preload,
GUINT_TO_POINTER (FALSE));

                disassemble_file (filename);
        } else {
-               mono_init (argv [0]);
+               if (!runtime_version)
+                       mono_init (argv [0]);

                for (l = input_files; l; l = l->next)
                        disassemble_file (l->data);


-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to