| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749 |
- <h1>Metadata Reading</h1>
- <p>The Metadata API gives developers low-level access to the
- information encoded in CLI modules: type and
- methods definitions encoded in metadata as well as access to
- the CIL code and embedded resources.
- <p>Managed developers access this information using either the
- System.Reflection API or a library
- like <a href="http://www.mono-project.com/Cecil">Cecil</a>.
- <p>To start using the Metadata API it is necessary
- to <a href="mono-api-assembly.html#cil_assembly_load">open an
- assembly</a> or a CIL image (a .dll or .exe file) using one of
- the
- <a href="mono-api-image.html#cil_image_open">CIL image
- opening</a> API calls.
- <h2>Metadata Heaps</h2>
- <p>ECMA CLI images contain four heaps that store different
- kinds of information, these are:
- <ul>
- <li>GUID heap (called #GUID) contains 128-bit GUIDs,
- you can get pointer to a GUID value by
- calling <a href="#api:mono_metadata_guid_heap">mono_metadata_guid_heap</a>.
- <li>User string heap (called #US), it contains user
- visible strings, you can fetch a string from this heap
- by calling
- <a href="#api:mono_metadata_user_string">mono_metadata_user_string</a>.
- <li>Blob heap (called #blob), it contains binary
- blobs of data, you can get a blob
- by <a href="#api:mono_metadata_blob_heap">mono_metadata_blob_heap</a>.
- You can determine the size of the blob using
- the <a href="#api:mono_metadata_decode_blob_size">mono_metadata_decode_blob_size</a>.
-
- </ul>
- <p>The ECMA file format also has an extra section called the
- "#~" stream, this stream is the one that holds the metadata
- tables. There is a high-level API to get access to the
- contents of this API, described in the
- section <a href="#metadata-tables">Metadata Tables</a>.
-
- <h4><a name="api:mono_metadata_guid_heap">mono_metadata_guid_heap</a></h4>
- <h4><a name="api:mono_metadata_string_heap">mono_metadata_string_heap</a></h4>
- <h4><a name="api:mono_metadata_blob_heap">mono_metadata_blob_heap</a></h4>
- <h4><a name="api:mono_metadata_user_string">mono_metadata_user_string</a></h4>
- <h4><a name="api:mono_metadata_decode_blob_size">mono_metadata_decode_blob_size</a></h4>
- <a name="metadata-tables"/>
- <h2>Metadata Tables</h2>
- <p>Metadata is encoded in a number of tables included on every
- CIL image. These tables contain type definitions, member
- definitions and so on, these constants are defined in the ECMA 335
- specification Partition II section 22. The following table
- shows the C constants defined in the Mono runtime and how they
- map to the equivalent ECMA CLI metadata table:
- <center>
- <table border=1>
- <thead>
- <td>
- <b>ECMA CLI Table Name</b>
- </td>
- <td>
- <b>C Constant Name</b>
- </td>
- <td>
- <b>Table Schema (Array Size + Columns Constants)</b>
- </td>
- </thead>
- <td>Assembly</td><td>MONO_TABLE_ASSEMBLY</td><td>
- Array size:
- MONO_ASSEMBLY_SIZE
- <ul>
- <li>MONO_ASSEMBLY_HASH_ALG
- <li>MONO_ASSEMBLY_MAJOR_VERSION
- <li>MONO_ASSEMBLY_MINOR_VERSION
- <li>MONO_ASSEMBLY_BUILD_NUMBER
- <li>MONO_ASSEMBLY_REV_NUMBER
- <li>MONO_ASSEMBLY_FLAGS
- <li>MONO_ASSEMBLY_PUBLIC_KEY
- <li>MONO_ASSEMBLY_NAME
- <li>MONO_ASSEMBLY_CULTURE
- </ul>
- </td>
- </tr>
- <td>AssemblyOS</td><td>MONO_TABLE_ASSEMBLYOS</td><td>
- Array size:
- MONO_ASSEMBLYOS_SIZE
- <ul>
- <li>MONO_ASSEMBLYOS_PLATFORM
- <li>MONO_ASSEMBLYOS_MAJOR_VERSION
- <li>MONO_ASSEMBLYOS_MINOR_VERSION
- </ul>
- </td>
- </tr>
- <td>AssemblyProcessor</td><td>MONO_TABLE_ASSEMBLYPROCESSOR</td><td>Array
- size: MONO_ASSEMBLYPROCESSOR_SIZE
- <ul>
- <li>MONO_ASSEMBLY_PROCESSOR
- </ul>
- </td>
- </tr>
- <td>AssemblyRef</td><td>MONO_TABLE_ASSEMBLYREF</td><td>
- Array size:
- MONO_ASSEMBLYREF_SIZE
- <ul>
- <li>MONO_ASSEMBLYREF_MAJOR_VERSION
- <li>MONO_ASSEMBLYREF_MINOR_VERSION
- <li>MONO_ASSEMBLYREF_BUILD_NUMBER
- <li>MONO_ASSEMBLYREF_REV_NUMBER
- <li>MONO_ASSEMBLYREF_FLAGS
- <li>MONO_ASSEMBLYREF_PUBLIC_KEY
- <li>MONO_ASSEMBLYREF_NAME
- <li>MONO_ASSEMBLYREF_CULTURE
- <li>MONO_ASSEMBLYREF_HASH_VALUE
- </ul>
- </td>
- </tr>
- <td>AssemblyRefProcessor</td><td>MONO_TABLE_ASSEMBLYREFPROCESSOR</td><td>Array
- size: MONO_ASSEMBLYREFPROC_SIZE
- <ul>
- <li>MONO_ASSEMBLYREFPROC_PROCESSOR
- <li>MONO_ASSEMBLYREFPROC_ASSEMBLYREF
- </ul>
- </td>
- </tr>
- <td>AssemblyRefOS</td><td>MONO_TABLE_ASSEMBLYREFOS</td><td>
- Array size:
- <li>MONO_ASSEMBLYREFOS_SIZE
- <ul>
- <li>MONO_ASSEMBLYREFOS_PLATFORM
- <li>MONO_ASSEMBLYREFOS_MAJOR_VERSION
- <li>MONO_ASSEMBLYREFOS_MINOR_VERSION
- <li>MONO_ASSEMBLYREFOS_ASSEMBLYREF
- </ul>
- </td>
- </tr>
- <td>ClassLayout</td><td>MONO_TABLE_CLASSLAYOUT</td><td>
- Array size:
- MONO_CLASSLAYOUT_SIZE
- <ul>
- <li>MONO_CLASS_LAYOUT_PACKING_SIZE
- <li>MONO_CLASS_LAYOUT_CLASS_SIZE
- <li>MONO_CLASS_LAYOUT_PARENT
- </ul>
- </td>
- </tr>
- <td>Constant</td><td>MONO_TABLE_CONSTANT</td><td>
- Array size:
- MONO_CONSTANT_SIZE
- <ul>
- <li>MONO_CONSTANT_TYPE
- <li>MONO_CONSTANT_PADDING
- <li>MONO_CONSTANT_PARENT
- <li>MONO_CONSTANT_VALUE
- </ul>
- </td>
- </tr>
- <td>CustomAttribute</td><td>MONO_TABLE_CUSTOMATTRIBUTE</td><td>
- Array size:
- MONO_CUSTOM_ATTR_SIZE
- <ul>
- <li>MONO_CUSTOM_ATTR_PARENT
- <li>MONO_CUSTOM_ATTR_TYPE
- <li>MONO_CUSTOM_ATTR_VALUE
- </ul>
- </td>
- </tr>
- <td>DeclSecurity</td><td>MONO_TABLE_DECLSECURITY</td><td>
- Array size:
- MONO_DECL_SECURITY_SIZE
- <ul>
- <li>MONO_DECL_SECURITY_ACTION
- <li>MONO_DECL_SECURITY_PARENT
- <li>MONO_DECL_SECURITY_PERMISSIONSET
- </ul>
- </td>
- </tr>
- <td>EventMap</td><td>MONO_TABLE_EVENTMAP</td><td>
- Array size:
- MONO_EVENT_MAP_SIZE
- <ul>
- <li>MONO_EVENT_MAP_PARENT
- <li>MONO_EVENT_MAP_EVENTLIST
- </ul>
- </td>
- </tr>
- <td>EventPtr</td><td>MONO_TABLE_EVENT_POINTER</td><td>
- Array size:
- MONO_EVENT_POINTER_SIZE
- <ul>
- <li>MONO_EVENT_POINTER_EVENT
- </ul>
- </td>
- </tr>
- <td>Event</td><td>MONO_TABLE_EVENT</td><td>
- Array size: MONO_EVENT_SIZE
- <ul>
- <li>MONO_EVENT_FLAGS
- <li>MONO_EVENT_NAME
- <li>MONO_EVENT_TYPE
- </ul>
- </td>
- </tr>
- <td>ExportedType</td><td>MONO_TABLE_EXPORTEDTYPE</td><td>
- Array size:
- MONO_EXPORTEDTYPE_SIZE
- <ul>
- <li>MONO_EXP_TYPE_FLAGS
- <li>MONO_EXP_TYPE_TYPEDEF
- <li>MONO_EXP_TYPE_NAME
- <li>MONO_EXP_TYPE_NAMESPACE
- <li>MONO_EXP_TYPE_IMPLEMENTATION
- </ul>
- </td>
- </tr>
- <td>Field</td><td>MONO_TABLE_FIELD</td><td>
- Array size: MONO_FIELD_SIZE
- <ul>
- <li>MONO_FIELD_FLAGS
- <li>MONO_FIELD_NAME
- <li>MONO_FIELD_SIGNATURE
- </ul>
- </td>
- </tr>
- <td>FieldLayoutt</td><td>MONO_TABLE_FIELDLAYOUT</td><td>
- Array size:
- MONO_FIELDLAYOUT_SIZE
- <ul>
- <li>MONO_FIELD_LAYOUT_OFFSET
- <li>MONO_FIELD_LAYOUT_FIELD
- </ul>
- </td>
- </tr>
- <td>FieldMarshal</td><td>MONO_TABLE_FIELDMARSHAL</td><td>
- Array size:
- MONO_FIELD_MARSHAL_SIZE
- <ul>
- <li>MONO_FIELD_MARSHAL_PARENT
- <li>MONO_FIELD_MARSHAL_NATIVE_TYPE
- </ul>
- </td>
- </tr>
- <td>FieldPtr</td><td>MONO_TABLE_FIELD_POINTER</td><td>
- Array size:
- MONO_FIELD_POINTER_SIZE
- <ul>
- <li>MONO_FIELD_POINTER_FIELD
- </ul>
- </td>
- </tr>
- <td>FieldRVA</td><td>MONO_TABLE_FIELDRVA</td><td>
- Array size:
- MONO_FIELDRVA_SIZE
- <ul>
- <li>MONO_FIELD_RVA_RVA
- <li>MONO_FIELD_RVA_FIELD
- </ul>
- </td>
- </tr>
- <td>File</td><td>MONO_TABLE_FILE</td><td>
- Array size: MONO_FILE_SIZE
- <ul>
- <li>MONO_FILE_FLAGS
- <li>MONO_FILE_NAME
- <li>MONO_FILE_HASH_VALUE
- </ul>
- </td>
- </tr>
- <td>GenericParam</td><td>MONO_TABLE_GENERICPARAM</td><td>
- Array size:
- MONO_GENERICPARAM_SIZE
- <ul>
- <li>MONO_GENERICPARAM_NUMBER
- <li>MONO_GENERICPARAM_FLAGS
- <li>MONO_GENERICPARAM_OWNER
- <li>MONO_GENERICPARAM_NAME
- </ul>
- </td>
- </tr>
- <td>GenericParamConstraint</td><td>MONO_TABLE_GENERICPARAMCONSTRAINT</td><td>Array
- size: MONO_GENERICPARAMCONSTRAINT_SIZE
- <ul>
- <li>MONO_GENPARCONSTRAINT_GENERICPAR
- <li>MONO_GENPARCONSTRAINT_CONSTRAINT
- </ul>
- </td>
- <tr>
- <td>ImplMap</td><td>MONO_TABLE_IMPLMAP</td><td>
- Array size:
- MONO_IMPLMAP_SIZE
- <ul>
- <li>MONO_IMPLMAP_FLAGS
- <li>MONO_IMPLMAP_MEMBER
- <li>MONO_IMPLMAP_NAME
- <li>MONO_IMPLMAP_SCOPE
- </ul>
- </td>
- </tr>
- <td>InterfaceImpl</td><td>MONO_TABLE_INTERFACEIMPL</td><td>
- Array size:
- <li>MONO_INTERFACEIMPL_SIZE
- <ul>
- <li>MONO_INTERFACEIMPL_CLASS
- <li>MONO_INTERFACEIMPL_INTERFACE
- </ul>
- </td>
- </tr>
- <td>ManifestResource</td><td>MONO_TABLE_MANIFESTRESOURCE</td><td>Array
- size: MONO_MANIFESTRESOURCE_SIZE
- <ul>
- <li>MONO_MANIFEST_OFFSET
- <li>MONO_MANIFEST_FLAGS
- <li>MONO_MANIFEST_NAME
- <li>MONO_MANIFEST_IMPLEMENTATION
- </ul>
- </td>
- </tr>
- <tr>
- <td>MemberRef</td><td>MONO_TABLE_MEMBERREF</td><td>
- Array size:
- MONO_MEMBERREF_SIZE
- <ul>
- <li>MONO_MEMBERREF_CLASS
- <li>MONO_MEMBERREF_NAME
- <li>MONO_MEMBERREF_SIGNATURE
- </ul>
- </td>
- </tr>
- <td>MethodImpl</td><td>MONO_TABLE_METHODIMPL</td><td>
- Array size:
- MONO_METHODIMPL_SIZE
- <ul>
- <li>MONO_METHODIMPL_CLASS
- <li>MONO_METHODIMPL_BODY
- <li>MONO_METHODIMPL_DECLARATION
- </ul>
- </td>
- </tr>
- <td>MethodSpec</td><td>MONO_TABLE_METHODSPEC</td><td>
- Array size:
- MONO_METHODSPEC_SIZE
- <ul>
- <li>MONO_METHODSPEC_METHOD
- <li>MONO_METHODSPEC_SIGNATURE
- </ul>
- </td>
- </tr>
- <tr>
- <td>MethodSemantics</td><td>MONO_TABLE_METHODSEMANTICS</td><td>Array
- size: MONO_METHOD_SEMA_SIZE
- <ul>
- <li>MONO_METHOD_SEMA_SEMANTICS
- <li>MONO_METHOD_SEMA_METHOD
- <li>MONO_METHOD_SEMA_ASSOCIATION
- </ul>
- </td>
- </tr>
- <td>Moduleref</td><td>MONO_TABLE_MODULEREF</td><td>
- Array size:
- MONO_MODULEREF_SIZE
- <ul>
- <li>MONO_MODULEREF_NAME
- </ul>
- </td>
- </tr>
- <tr>
- <td>Module</td><td>MONO_TABLE_MODULE</td><td>
- Array size:
- MONO_MODULE_SIZE
- <br>
- Columns:
- <ul>
- <li>MONO_MODULE_GENERATION
- <li>MONO_MODULE_NAME
- <li>MONO_MODULE_MVID
- <li>MONO_MODULE_ENC
- <li>MONO_MODULE_ENCBASE
- </ul>
- </td>
- </tr>
- <td>TypeRef</td><td>MONO_TABLE_TYPEREF</td><td>
- Array size:
- MONO_TYPEREF_SIZE
- <ul>
- <li>MONO_TYPEREF_SCOPE
- <li>MONO_TYPEREF_NAME
- <li>MONO_TYPEREF_NAMESPACE
- </ul>
- </td>
- </tr>
- <tr>
- <td>MethodPtr</td><td>MONO_TABLE_METHOD_POINTER</td><td>
- Array size:
- MONO_METHOD_POINTER_SIZE
- <ul>
- <li>MONO_METHOD_POINTER_METHOD
- </ul>
- </td>
- </tr>
- <td>Method</td><td>MONO_TABLE_METHOD</td><td>
- Array size:
- MONO_METHOD_SIZE
- <ul>
- <li>MONO_METHOD_RVA
- <li>MONO_METHOD_IMPLFLAGS
- <li>MONO_METHOD_FLAGS
- <li>MONO_METHOD_NAME
- <li>MONO_METHOD_SIGNATURE
- <li>MONO_METHOD_PARAMLIST
- </ul>
- </td>
- </tr>
- <tr>
- <td>NestedClass</td><td>MONO_TABLE_NESTEDCLASS</td><td>
- Array size:
- MONO_NESTEDCLASS_SIZE
- <ul>
- <li>MONO_NESTED_CLASS_NESTED
- <li>MONO_NESTED_CLASS_ENCLOSING
- </ul>
- </td>
- </tr>
- <tr>
- <td>ParamPtr</td><td>MONO_TABLE_PARAM_POINTER</td><td>
- Array size:
- MONO_PARAM_POINTER_SIZE
- <ul>
- <li>MONO_PARAM_POINTER_PARAM
- </ul>
- </td>
- </tr>
- <td>Param</td><td>MONO_TABLE_PARAM</td><td>
- Array size: MONO_PARAM_SIZE
- <ul>
- <li>MONO_PARAM_FLAGS
- <li>MONO_PARAM_SEQUENCE
- <li>MONO_PARAM_NAME
- </ul>
- </td>
- </tr>
- <td>PropertyMap</td><td>MONO_TABLE_PROPERTYMAP</td><td>
- Array size:
- MONO_PROPERTY_MAP_SIZE
- <ul>
- <li>MONO_PROPERTY_MAP_PARENT
- <li>MONO_PROPERTY_MAP_PROPERTY_LIST
- </ul>
- </td>
- </tr>
- <td>PropertyPtr</td><td>MONO_TABLE_PROPERTY_POINTER</td><td>Array
- size: MONO_PROPERTY_POINTER_SIZE
- <ul>
- <li>MONO_PROPERTY_POINTER_PROPERTY
- </ul>
- </td>
- </tr>
- <td>Property</td><td>MONO_TABLE_PROPERTY</td><td>
- Array size:
- MONO_PROPERTY_SIZE
- <ul>
- <li>MONO_PROPERTY_FLAGS
- <li>MONO_PROPERTY_NAME
- <li>MONO_PROPERTY_TYPE
- </ul>
- </td>
- </tr>
- <tr>
- <td>StandaloneSig</td><td>MONO_TABLE_STANDALONESIG</td><td>
- Array size:
- <li>MONO_STAND_ALONE_SIGNATURE_SIZE
- <ul>
- <li>MONO_STAND_ALONE_SIGNATURE
- </ul>
- </td>
- </tr>
- <tr>
- <td>TypeDef</td><td>MONO_TABLE_TYPEDEF</td><td>
- Array size:
- MONO_TYPEDEF_SIZE
- <ul>
- <li>MONO_TYPEDEF_FLAGS
- <li>MONO_TYPEDEF_NAME
- <li>MONO_TYPEDEF_NAMESPACE
- <li>MONO_TYPEDEF_EXTENDS
- <li>MONO_TYPEDEF_FIELD_LIST
- <li>MONO_TYPEDEF_METHOD_LIST
- </ul>
- </td>
- </tr>
- <tr>
- <td>TypeSpec</td><td>MONO_TABLE_TYPESPEC</td><td>
- Array size:
- MONO_TYPESPEC_SIZE
- <ul>
- <li>MONO_TYPESPEC_SIGNATURE
- </ul>
- </td>
- </tr>
- </table>
- </center>
- <p>Each table can contain zero or more rows, you must call the
- <a href="#api:mono_metadata_table_rows">mono_metadata_table_rows</a>
- to obtain the number of rows in a table, and then you can
- extract individual row values by using
- the <a href="#api:mono_metadata_decode_row">mono_metadata_decode_row</a>
- or
- the <a href="#api:mono_metadata_decode_row_col">mono_metadata_decode_row_col</a>.
- When decoding rows you must provide an guint32 array large
- enough to hold as many columns as the table contains.
-
- <p>The metadata tables are stored in the MonoImage, you obtain
- a pointer to the MonoTableInfo by calling
- the <a href="#api:mono_image_get_table_info">mono_image_get_table_info</a>
- and then you can scan those tables, for example:
- <pre class="prettyprint">
- /*
- * Dumps a few fields from the AssemblyRef table
- */
- void DumpAssemblyRefs (MonoImage *image)
- {
- /* Get a pointer to the AssemblyRef metadata table */
- MonoTableInfo *t = mono_image_get_table_info (image, MONO_TABLE_ASSEMBLYREF);
- /* Fetch the number of rows available in the table */
- int rows = mono_table_info_get_rows (t);
- int i;
- /* For each row, print some of its values */
- for (i = 0; i < rows; i++){
- /* Space where we extract one row from the metadata table */
- guint32 cols [MONO_ASSEMBLYREF_SIZE];
- /* Extract the row into the array cols */
- mono_metadata_decode_row (t, i, cols, MONO_ASSEMBLYREF_SIZE);
- fprintf (output, "%d: Version=%d.%d.%d.%d\n\tName=%s\n", i + 1,
- cols [MONO_ASSEMBLYREF_MAJOR_VERSION],
- cols [MONO_ASSEMBLYREF_MINOR_VERSION],
- cols [MONO_ASSEMBLYREF_BUILD_NUMBER],
- cols [MONO_ASSEMBLYREF_REV_NUMBER],
- mono_metadata_string_heap (image, cols [MONO_ASSEMBLYREF_NAME]));
- }
- }
- </pre>
- <p>The above program shows the following output when ran on
- the C# compiler:
- <pre>
- 1: Version=1.0.5000.0
- Name=mscorlib
- 2: Version=1.0.5000.0
- Name=System
- 3: Version=1.0.5000.0
- Name=System.Xml
- </pre>
- <p>
- <h3>Metadata Tables API</h3>
- <p>These are the APIs for dealing with tables:
- <h4><a name="api:mono_image_get_table_info">mono_image_get_table_info</a></h4>
- <h4><a name="api:mono_image_get_table_rows">mono_image_get_table_rows</a></h4>
- <h4><a name="api:mono_metadata_get_table">mono_metadata_get_table</a></h4>
- <h4><a name="api:mono_meta_table_name">mono_meta_table_name</a></h4>
- <h4><a name="api:mono_metadata_decode_row_col">mono_metadata_decode_row_col</a></h4>
- <h4><a name="api:mono_metadata_decode_row">mono_metadata_decode_row</a></h4>
- <h4><a name="api:mono_metadata_compute_size">mono_metadata_compute_size</a></h4>
- <h4><a name="api:mono_metadata_custom_attrs_from_index">mono_metadata_custom_attrs_from_index</a></h4>
- <h4><a name="api:mono_metadata_decode_signed_value">mono_metadata_decode_signed_value</a></h4>
- <h4><a name="api:mono_metadata_decode_value">mono_metadata_decode_value</a></h4>
- <h4><a name="api:mono_metadata_encode_value">mono_metadata_encode_value</a></h4>
-
- <h2>Metadata access API</h2>
- <p>This is the low-level API for accessing the metadata
- images.
-
- <h4><a name="api:mono_cli_rva_image_map">mono_cli_rva_image_map</a></h4>
- <h4><a name="api:mono_pe_file_open">mono_pe_file_open</a></h4>
- <h4><a name="api:mono_metadata_events_from_typedef">mono_metadata_events_from_typedef</a></h4>
- <h4><a name="api:mono_metadata_field_info">mono_metadata_field_info</a></h4>
- <h4><a name="api:mono_metadata_free_array">mono_metadata_free_array</a></h4>
- <h4><a name="api:mono_metadata_free_marshal_spec">mono_metadata_free_marshal_spec</a></h4>
- <h4><a name="api:mono_metadata_free_mh">mono_metadata_free_mh</a></h4>
- <h4><a name="api:mono_metadata_free_type">mono_metadata_free_type</a></h4>
- <h4><a name="api:mono_metadata_get_constant_index">mono_metadata_get_constant_index</a></h4>
- <h4><a name="api:mono_metadata_get_marshal_info">mono_metadata_get_marshal_info</a></h4>
- <h4><a name="api:mono_metadata_implmap_from_method">mono_metadata_implmap_from_method</a></h4>
- <h4><a name="api:mono_metadata_interfaces_from_typedef_full">mono_metadata_interfaces_from_typedef_full</a></h4>
- <h4><a name="api:mono_metadata_interfaces_from_typedef">mono_metadata_interfaces_from_typedef</a></h4>
- <h4><a name="api:mono_metadata_locate">mono_metadata_locate</a></h4>
- <h4><a name="api:mono_metadata_locate_token">mono_metadata_locate_token</a></h4>
- <h4><a name="api:mono_metadata_methods_from_event">mono_metadata_methods_from_event</a></h4>
- <h4><a name="api:mono_metadata_methods_from_property">mono_metadata_methods_from_property</a></h4>
- <h4><a name="api:mono_metadata_nested_in_typedef">mono_metadata_nested_in_typedef</a></h4>
- <h4><a name="api:mono_metadata_nesting_typedef">mono_metadata_nesting_typedef</a></h4>
- <h4><a name="api:mono_metadata_packing_from_typedef">mono_metadata_packing_from_typedef</a></h4>
- <h4><a name="api:mono_metadata_properties_from_typedef">mono_metadata_properties_from_typedef</a></h4>
- <h4><a name="api:mono_metadata_token_from_dor">mono_metadata_token_from_dor</a></h4>
- <h4><a name="api:mono_metadata_typedef_from_field">mono_metadata_typedef_from_field</a></h4>
- <h4><a name="api:mono_metadata_typedef_from_method">mono_metadata_typedef_from_method</a></h4>
- <h4><a name="api:mono_metadata_type_equal">mono_metadata_type_equal</a></h4>
- <h4><a name="api:mono_metadata_type_hash">mono_metadata_type_hash</a></h4>
- <h4><a name="api:mono_metadata_declsec_from_index">mono_metadata_declsec_from_index</a></h4>
- <h4><a name="api:mono_metadata_free_method_signature">mono_metadata_free_method_signature</a></h4>
- <h3>Retrieving Objects from Tokens</h3>
- <h4><a name="api:mono_metadata_parse_custom_mod">mono_metadata_parse_custom_mod</a></h4>
- <h4><a name="api:mono_metadata_parse_field_type">mono_metadata_parse_field_type</a></h4>
- <h4><a name="api:mono_metadata_parse_marshal_spec">mono_metadata_parse_marshal_spec</a></h4>
- <h4><a name="api:mono_metadata_parse_method_signature_full">mono_metadata_parse_method_signature_full</a></h4>
- <h4><a name="api:mono_metadata_parse_method_signature">mono_metadata_parse_method_signature</a></h4>
- <h4><a name="api:mono_metadata_parse_mh_full">mono_metadata_parse_mh_full</a></h4>
- <h4><a name="api:mono_metadata_parse_mh">mono_metadata_parse_mh</a></h4>
- <h4><a name="api:mono_metadata_parse_param">mono_metadata_parse_param</a></h4>
- <h4><a name="api:mono_metadata_parse_signature_full">mono_metadata_parse_signature_full</a></h4>
- <h4><a name="api:mono_metadata_parse_signature">mono_metadata_parse_signature</a></h4>
- <h4><a name="api:mono_metadata_parse_typedef_or_ref">mono_metadata_parse_typedef_or_ref</a></h4>
- <h4><a name="api:mono_metadata_parse_type_full">mono_metadata_parse_type_full</a></h4>
- <h4><a name="api:mono_metadata_parse_type">mono_metadata_parse_type</a></h4>
- <h2>Metadata Loader Locking</h2>
- <p>The locking functions here are used by code in class.c and
- metadata.c to lock access to the shared hashtables inside the
- MonoImage.
-
- <h4><a name="api:mono_loader_lock">mono_loader_lock</a></h4>
- <h4><a name="api:mono_loader_unlock">mono_loader_unlock</a></h4>
- <h2>Generics Support</h2>
- <h4><a name="api:mono_metadata_generic_class_is_valuetype">mono_metadata_generic_class_is_valuetype</a></h4>
- <h4><a name="api:mono_metadata_has_generic_params">mono_metadata_has_generic_params</a></h4>
- <h4><a name="api:mono_metadata_inflate_generic_inst">mono_metadata_inflate_generic_inst</a></h4>
- <h4><a name="api:mono_metadata_parse_generic_inst">mono_metadata_parse_generic_inst</a></h4>
- <h4><a name="api:mono_metadata_generic_inst_equal">mono_metadata_generic_inst_equal</a></h4>
- <h4><a name="api:mono_metadata_generic_inst_hash">mono_metadata_generic_inst_hash</a></h4>
- <h4><a name="api:mono_metadata_load_generic_params">mono_metadata_load_generic_params</a></h4>
- <h4><a name="api:mono_metadata_generic_inst_is_valuetype">mono_metadata_generic_inst_is_valuetype</a></h4>
- <h4><a name="api:mono_metadata_generic_method_equal">mono_metadata_generic_method_equal</a></h4>
- <h2>Tokens</h2>
- <h4><a name="api:mono_ldtoken">mono_ldtoken</a></h4>
- <h4><a name="api:mono_lookup_dynamic_token">mono_lookup_dynamic_token</a></h4>
- <h4><a name="api:mono_ldstr">mono_ldstr</a></h4>
- <h4><a name="api:mono_exception_from_token">mono_exception_from_token</a></h4>
- <h4><a name="api:mono_create_jit_trampoline_from_token">mono_create_jit_trampoline_from_token</a></h4>
- <h2>OpCodes</h2>
- <h4><a name="api:mono_opcode_name">mono_opcode_name</a></h4>
- <h4><a name="api:mono_opcode_value">mono_opcode_value</a></h4>
- <h2>Metadata Loading Errors</h2>
- <p>The routines in this section are used to cope with errors
- during metadata loading. Errors in metadata handling can
- happen for many reason, and these include (this is not an
- exhaustive list).
- <ul>
- <li>An assembly referenced is missing.
- <li>Fields referenced are missing.
- <li>Methods referenced are missing.
- </ul>
- <p>The <tt>mono_loader_set_*</tt> routines are invoked during
- metadata loading to flag that an error has happened. The
- class loading errros are flagged in a per-thread basis.
- <P>In various spots in the runtime the
- <tt>mono_loader_get_last_error</tt> routine is called to check
- if there was a problem, and then errors are propagated upwards
- on the stack until we reach a point where an exception can be
- raised and no runtime locks are held.
- <p>The <tt>mono_loader_error_prepare_exception</tt> takes a
- <tt>MonoLoaderError</tt> structure (the value returned from
- <tt>mono_loader_get_last_error</tt>), turns that into an
- exception and clears the error condition from the current
- thread.
-
- <h4><a name="api:mono_loader_set_error_field_load">mono_loader_set_error_field_load</a></h4>
- <h4><a name="api:mono_loader_set_error_method_load">mono_loader_set_error_method_load</a></h4>
- <h4><a name="api:mono_loader_set_error_type_load">mono_loader_set_error_type_load</a></h4>
- <h4><a name="api:mono_loader_get_last_error">mono_loader_get_last_error</a></h4>
- <h4><a name="api:mono_loader_clear_error">mono_loader_clear_error</a></h4>
- <h4><a name="api:mono_loader_error_prepare_exception">mono_loader_error_prepare_exception</a></h4>
|