X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fimage.h;h=f3adaa3a3a19ab1f49209e54da8932154cbdb4c4;hb=c28164a651e968a5f4704db98d26e3d9e3f522aa;hp=a2813874d42bee2f8aa869591e790cc55dae4390;hpb=e6fb0d78b4b0143cf0298f648ac4a42bb7296f31;p=mono.git diff --git a/mono/metadata/image.h b/mono/metadata/image.h index a2813874d42..f3adaa3a3a1 100644 --- a/mono/metadata/image.h +++ b/mono/metadata/image.h @@ -3,149 +3,28 @@ #include #include -#include + +G_BEGIN_DECLS typedef struct _MonoImage MonoImage; +typedef struct _MonoAssembly MonoAssembly; +typedef struct _MonoTableInfo MonoTableInfo; + +#define MONO_PUBLIC_KEY_TOKEN_LENGTH 17 typedef struct { const char *name; const char *culture; const char *hash_value; const guint8* public_key; + // string of 16 hex chars + 1 NULL + guchar public_key_token [MONO_PUBLIC_KEY_TOKEN_LENGTH]; guint32 hash_alg; guint32 hash_len; guint32 flags; guint16 major, minor, build, revision; } MonoAssemblyName; -typedef struct { - int ref_count; - char *basedir; - MonoAssemblyName aname; - GModule *aot_module; - MonoImage *image; - /* Load files here */ - gboolean dynamic; -} MonoAssembly; - -typedef struct { - const char* data; - guint32 size; -} MonoStreamHeader; - -typedef struct { - guint32 rows, row_size; - const char *base; - - /* - * Tables contain up to 9 columns and the possible sizes of the - * fields in the documentation are 1, 2 and 4 bytes. So we - * can encode in 2 bits the size. - * - * A 32 bit value can encode the resulting size - * - * The top eight bits encode the number of columns in the table. - * we only need 4, but 8 is aligned no shift required. - */ - guint32 size_bitfield; -} MonoTableInfo; - -struct _MonoImage { - int ref_count; - FILE *f; - /* if f is NULL the image was loaded from raw data */ - char *raw_data; - guint32 raw_data_len; - gboolean raw_data_allocated; - char *name; - const char *assembly_name; - const char *module_name; - const char *version; - char *guid; - void *image_info; - - char *raw_metadata; - - gboolean idx_string_wide, idx_guid_wide, idx_blob_wide; - - MonoStreamHeader heap_strings; - MonoStreamHeader heap_us; - MonoStreamHeader heap_blob; - MonoStreamHeader heap_guid; - MonoStreamHeader heap_tables; - - const char *tables_base; - - MonoTableInfo tables [64]; - - /* - * references is initialized only by using the mono_assembly_open - * function, and not by using the lowlevel mono_image_open. - * - * It is NULL terminated. - */ - MonoAssembly **references; - - MonoImage **modules; - - MonoImage **files; - - /* - * The Assembly this image was loaded from. - */ - MonoAssembly *assembly; - - /* - * Indexed by method tokens and typedef tokens. - */ - GHashTable *method_cache; - GHashTable *class_cache; - /* - * Indexed by fielddef and memberref tokens - */ - GHashTable *field_cache; - - /* indexed by typespec tokens. */ - GHashTable *typespec_cache; - /* - * Indexes namespaces to hash tables that map class name to typedef token. - */ - GHashTable *name_cache; - - /* - * Indexed by ((rank << 24) | (typedef & 0xffffff)), which limits us to a - * maximal rank of 255 - */ - GHashTable *array_cache; - - /* - * indexed by MonoMethodSignature - */ - GHashTable *delegate_begin_invoke_cache; - GHashTable *delegate_end_invoke_cache; - GHashTable *delegate_invoke_cache; - - /* - * indexed by MonoMethod pointers - */ - GHashTable *runtime_invoke_cache; - GHashTable *managed_wrapper_cache; - GHashTable *native_wrapper_cache; - GHashTable *remoting_invoke_cache; - GHashTable *synchronized_cache; - - void *reflection_info; - - /* - * user_info is a public field and is not touched by the - * metadata engine - */ - void *user_info; - - /* Whenever this is a dynamically emitted module */ - gboolean dynamic; -}; - typedef enum { MONO_IMAGE_OK, MONO_IMAGE_ERROR_ERRNO, @@ -154,13 +33,22 @@ typedef enum { } MonoImageOpenStatus; void mono_images_init (void); +void mono_images_cleanup (void); MonoImage *mono_image_open (const char *fname, MonoImageOpenStatus *status); +MonoImage *mono_image_open_full (const char *fname, + MonoImageOpenStatus *status, gboolean refonly); +MonoImage *mono_pe_file_open (const char *fname, + MonoImageOpenStatus *status); MonoImage *mono_image_open_from_data (char *data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus *status); +MonoImage *mono_image_open_from_data_full (char *data, guint32 data_len, gboolean need_copy, + MonoImageOpenStatus *status, gboolean refonly); MonoImage *mono_image_loaded (const char *name); +MonoImage *mono_image_loaded_full (const char *name, gboolean refonly); MonoImage *mono_image_loaded_by_guid (const char *guid); +MonoImage *mono_image_loaded_by_guid_full (const char *guid, gboolean refonly); void mono_image_init (MonoImage *image); void mono_image_close (MonoImage *image); void mono_image_addref (MonoImage *image); @@ -175,6 +63,19 @@ guint32 mono_image_get_entry_point (MonoImage *image); const char *mono_image_get_resource (MonoImage *image, guint32 offset, guint32 *size); MonoImage* mono_image_load_file_for_image (MonoImage *image, int fileidx); +MonoImage* mono_image_load_module (MonoImage *image, int idx); + +const char* mono_image_get_name (MonoImage *image); +const char* mono_image_get_filename (MonoImage *image); +const char * mono_image_get_guid (MonoImage *image); +MonoAssembly* mono_image_get_assembly (MonoImage *image); +gboolean mono_image_is_dynamic (MonoImage *image); +char* mono_image_rva_map (MonoImage *image, guint32 rva); + +const MonoTableInfo *mono_image_get_table_info (MonoImage *image, int table_id); +int mono_image_get_table_rows (MonoImage *image, int table_id); +int mono_table_info_get_rows (const MonoTableInfo *table); + /* This actually returns a MonoPEResourceDataEntry *, but declaring it * causes an include file loop. */ @@ -187,5 +88,8 @@ guint32 mono_image_strong_name_position (MonoImage *image, guint32 *size); void mono_image_add_to_name_cache (MonoImage *image, const char *nspace, const char *name, guint32 idx); +gboolean mono_image_has_authenticode_entry (MonoImage *image); + +G_END_DECLS #endif