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