1 #ifndef _MONONET_METADATA_IMAGE_H_
2 #define _MONONET_METADATA_IMAGE_H_
8 typedef struct _MonoImage MonoImage;
13 const char *hash_value;
16 guint16 major, minor, build, revision;
22 MonoAssemblyName aname;
35 guint32 rows, row_size;
39 * Tables contain up to 9 columns and the possible sizes of the
40 * fields in the documentation are 1, 2 and 4 bytes. So we
41 * can encode in 2 bits the size.
43 * A 32 bit value can encode the resulting size
45 * The top eight bits encode the number of columns in the table.
46 * we only need 4, but 8 is aligned no shift required.
48 guint32 size_bitfield;
54 /* if f is NULL the image was loaded rom raw data */
57 gboolean raw_data_allocated;
59 const char *assembly_name;
60 const char *module_name;
67 gboolean idx_string_wide, idx_guid_wide, idx_blob_wide;
69 MonoStreamHeader heap_strings;
70 MonoStreamHeader heap_us;
71 MonoStreamHeader heap_blob;
72 MonoStreamHeader heap_guid;
73 MonoStreamHeader heap_tables;
75 const char *tables_base;
77 MonoTableInfo tables [64];
80 * references is initialized only by using the mono_assembly_open
81 * function, and not by using the lowlevel mono_image_open.
83 * It is NULL terminated.
85 MonoAssembly **references;
90 * The Assembly this image was loaded from.
92 MonoAssembly *assembly;
95 * Indexed by method tokens and typedef tokens.
97 GHashTable *method_cache;
98 GHashTable *class_cache;
99 /* indexed by a generic type instantiation */
100 GHashTable *generics_cache;
102 * Indexes namespaces to hash tables that map class name to typedef token.
104 GHashTable *name_cache;
107 * Indexed by ((rank << 24) | (typedef & 0xffffff)), which limits us to a
108 * maximal rank of 255
110 GHashTable *array_cache;
113 * indexed by MonoMethodSignature
115 GHashTable *delegate_begin_invoke_cache;
116 GHashTable *delegate_end_invoke_cache;
117 GHashTable *delegate_invoke_cache;
120 * indexed by MonoMethod pointers
122 GHashTable *runtime_invoke_cache;
123 GHashTable *managed_wrapper_cache;
124 GHashTable *native_wrapper_cache;
125 GHashTable *remoting_invoke_cache;
126 GHashTable *synchronized_cache;
128 void *reflection_info;
131 * user_info is a public field and is not touched by the
139 MONO_IMAGE_ERROR_ERRNO,
140 MONO_IMAGE_MISSING_ASSEMBLYREF,
141 MONO_IMAGE_IMAGE_INVALID
142 } MonoImageOpenStatus;
144 void mono_images_init (void);
146 MonoImage *mono_image_open (const char *fname,
147 MonoImageOpenStatus *status);
148 MonoImage *mono_image_open_from_data (char *data, guint32 data_len, gboolean need_copy,
149 MonoImageOpenStatus *status);
150 MonoImage *mono_image_loaded (const char *name);
151 MonoImage *mono_image_loaded_by_guid (const char *guid);
152 void mono_image_init (MonoImage *image);
153 void mono_image_close (MonoImage *image);
154 const char *mono_image_strerror (MonoImageOpenStatus status);
156 int mono_image_ensure_section (MonoImage *image,
157 const char *section);
158 int mono_image_ensure_section_idx (MonoImage *image,
161 guint32 mono_image_get_entry_point (MonoImage *image);
162 const char *mono_image_get_resource (MonoImage *image, guint32 offset, guint32 *size);
164 void mono_image_load_references (MonoImage *image, MonoImageOpenStatus *status);
166 /* This actually returns a MonoPEResourceDataEntry *, but declaring it
167 * causes an include file loop.
169 gpointer mono_image_lookup_resource (MonoImage *image, guint32 res_id,
170 guint32 lang_id, gunichar2 *name);
172 const char* mono_image_get_public_key (MonoImage *image, guint32 *size);
173 const char* mono_image_get_strong_name (MonoImage *image, guint32 *size);
174 guint32 mono_image_strong_name_position (MonoImage *image, guint32 *size);
175 void mono_image_add_to_name_cache (MonoImage *image,
177 const char *name, guint32 idx);