}
mh = mono_metadata_parse_mh_full (m, container, ptr);
- if ((entry_point = mono_image_get_entry_point (m))){
+ if ((entry_point = mono_image_get_entry_point (m)) && mono_metadata_token_index (entry_point)){
loc = mono_metadata_locate_token (m, entry_point);
if (rva == read32 (loc))
fprintf (output, "\t.entrypoint\n");
g_string_sprintfa (res, "%s %s (", blurb, qk);
g_free (qk);
g_free (blurb);
- mono_metadata_free_type (type);
for (i = 0; i < pcount; i++) {
if (i)
g_string_append (res, ", ");
param = mono_metadata_parse_type_full (m, container, MONO_PARSE_PARAM, 0, ptr, &ptr);
blurb = dis_stringify_param (m, param);
g_string_append (res, blurb);
- mono_metadata_free_type (param);
g_free (blurb);
}
g_string_append_c (res, ')');
}
}
+static const char *
+get_uninitialized_data_type (guint32 size)
+{
+ switch (size) {
+ case 1:
+ return "int8";
+ case 2:
+ return "int16";
+ case 4:
+ return "int32";
+ case 8:
+ return "int64";
+ default:
+ g_error ("get_uninitialized_data_type for size: %d\n", size);
+ }
+}
+
/**
* dis_data:
* @m: metadata context
type = mono_metadata_parse_field_type (m, 0, sig + 1, &sig);
mono_class_init (mono_class_from_mono_type (type));
size = mono_type_size (type, &align);
- fprintf (output, ".data D_%08x = bytearray (", cols [MONO_FIELD_RVA_RVA]);
- for (b = 0; b < size; ++b) {
- if (!(b % 16))
- fprintf (output, "\n\t");
- fprintf (output, " %02X", rva [b] & 0xff);
- }
- fprintf (output, ") // size: %d\n", size);
+
+ if (rva) {
+ fprintf (output, ".data D_%08x = bytearray (", cols [MONO_FIELD_RVA_RVA]);
+ for (b = 0; b < size; ++b) {
+ if (!(b % 16))
+ fprintf (output, "\n\t");
+ fprintf (output, " %02X", rva [b] & 0xff);
+ }
+ fprintf (output, ") // size: %d\n", size);
+ } else
+ fprintf (output, ".data D_%08x = %s [%d]\n",
+ cols [MONO_FIELD_RVA_RVA], get_uninitialized_data_type (size), size);
}
}
static void
disassemble_file (const char *file)
{
- MonoAssembly *ass;
MonoImageOpenStatus status;
MonoImage *img;
- ass = mono_assembly_open (file, &status);
- if (ass == NULL){
- img = mono_image_open (file, &status);
- if (!img) {
- fprintf (stderr, "Error while trying to process %s\n", file);
- return;
- } else {
- mono_assembly_load_references (img, &status);
- }
+ img = mono_image_open (file, &status);
+ if (!img) {
+ fprintf (stderr, "Error while trying to process %s\n", file);
+ return;
} else {
- img = ass->image;
+ mono_assembly_load_references (img, &status);
}
setup_filter (img);