1 /**
2  * \file
3  */
4 
5 #ifndef _MONONET_METADATA_IMAGE_H_
6 #define _MONONET_METADATA_IMAGE_H_
7 
8 #include <stdio.h>
9 #include <mono/utils/mono-publib.h>
10 #include <mono/utils/mono-error.h>
11 
12 MONO_BEGIN_DECLS
13 
14 typedef struct _MonoImage MonoImage;
15 typedef struct _MonoAssembly MonoAssembly;
16 typedef struct _MonoAssemblyName MonoAssemblyName;
17 typedef struct _MonoTableInfo MonoTableInfo;
18 
19 typedef enum {
20 	MONO_IMAGE_OK,
21 	MONO_IMAGE_ERROR_ERRNO,
22 	MONO_IMAGE_MISSING_ASSEMBLYREF,
23 	MONO_IMAGE_IMAGE_INVALID
24 } MonoImageOpenStatus;
25 
26 MONO_API void          mono_images_init    (void);
27 MONO_API void          mono_images_cleanup (void);
28 
29 MONO_API MonoImage    *mono_image_open     (const char *fname,
30 				   MonoImageOpenStatus *status);
31 MONO_API MonoImage    *mono_image_open_full (const char *fname,
32 				   MonoImageOpenStatus *status, mono_bool refonly);
33 MONO_API MonoImage    *mono_pe_file_open     (const char *fname,
34 				     MonoImageOpenStatus *status);
35 MONO_API MonoImage    *mono_image_open_from_data (char *data, uint32_t data_len, mono_bool need_copy,
36                                          MonoImageOpenStatus *status);
37 MONO_API MonoImage    *mono_image_open_from_data_full (char *data, uint32_t data_len, mono_bool need_copy,
38                                          MonoImageOpenStatus *status, mono_bool refonly);
39 MONO_API MonoImage    *mono_image_open_from_data_with_name (char *data, uint32_t data_len, mono_bool need_copy,
40                                                    MonoImageOpenStatus *status, mono_bool refonly, const char *name);
41 MONO_API void          mono_image_fixup_vtable (MonoImage *image);
42 MONO_API MonoImage    *mono_image_loaded   (const char *name);
43 MONO_API MonoImage    *mono_image_loaded_full   (const char *name, mono_bool refonly);
44 MONO_API MonoImage    *mono_image_loaded_by_guid (const char *guid);
45 MONO_API MonoImage    *mono_image_loaded_by_guid_full (const char *guid, mono_bool refonly);
46 MONO_API void          mono_image_init     (MonoImage *image);
47 MONO_API void          mono_image_close    (MonoImage *image);
48 MONO_API void          mono_image_addref   (MonoImage *image);
49 MONO_API const char   *mono_image_strerror (MonoImageOpenStatus status);
50 
51 MONO_API int           mono_image_ensure_section     (MonoImage *image,
52 					     const char *section);
53 MONO_API int           mono_image_ensure_section_idx (MonoImage *image,
54 					     int section);
55 
56 MONO_API uint32_t       mono_image_get_entry_point    (MonoImage *image);
57 MONO_API const char   *mono_image_get_resource       (MonoImage *image, uint32_t offset, uint32_t *size);
58 MONO_RT_EXTERNAL_ONLY MONO_API MonoImage*    mono_image_load_file_for_image (MonoImage *image, int fileidx);
59 
60 MONO_RT_EXTERNAL_ONLY MONO_API MonoImage*    mono_image_load_module (MonoImage *image, int idx);
61 
62 MONO_API const char*   mono_image_get_name       (MonoImage *image);
63 MONO_API const char*   mono_image_get_filename   (MonoImage *image);
64 MONO_API const char *  mono_image_get_guid       (MonoImage *image);
65 MONO_API MonoAssembly* mono_image_get_assembly   (MonoImage *image);
66 MONO_API mono_bool     mono_image_is_dynamic     (MonoImage *image);
67 MONO_API char*         mono_image_rva_map        (MonoImage *image, uint32_t rva);
68 
69 MONO_API const MonoTableInfo *mono_image_get_table_info (MonoImage *image, int table_id);
70 MONO_API int                  mono_image_get_table_rows (MonoImage *image, int table_id);
71 MONO_API int                  mono_table_info_get_rows  (const MonoTableInfo *table);
72 
73 /* This actually returns a MonoPEResourceDataEntry *, but declaring it
74  * causes an include file loop.
75  */
76 MONO_API void*      mono_image_lookup_resource (MonoImage *image, uint32_t res_id,
77 					  uint32_t lang_id, mono_unichar2 *name);
78 
79 MONO_API const char*   mono_image_get_public_key  (MonoImage *image, uint32_t *size);
80 MONO_API const char*   mono_image_get_strong_name (MonoImage *image, uint32_t *size);
81 MONO_API uint32_t       mono_image_strong_name_position (MonoImage *image, uint32_t *size);
82 MONO_API void          mono_image_add_to_name_cache (MonoImage *image,
83 			const char *nspace, const char *name, uint32_t idx);
84 MONO_API mono_bool     mono_image_has_authenticode_entry (MonoImage *image);
85 
86 MONO_END_DECLS
87 
88 #endif
89