5ab0fefb9792f2ce20866b828af5c2d95dcf74a2
[mono.git] / docs / sources / mono-api-metadata.html
1 <h1>Metadata Reading</h1>
2
3         <p>The Metadata API gives developers low-level access to the
4         information encoded in CLI modules: type and
5         methods definitions encoded in metadata as well as access to
6         the CIL code and embedded resources.
7
8         <p>Managed developers access this information using either the
9         System.Reflection API or a library
10         like <a href="http://www.mono-project.com/Cecil">Cecil</a>.
11
12         <p>To start using the Metadata API it is necessary
13         to <a href="mono-api-assembly.html#cil_assembly_load">open an
14         assembly</a> or a CIL image (a .dll or .exe file) using one of
15         the
16         <a href="mono-api-image.html#cil_image_open">CIL image
17         opening</a> API calls.
18
19 <h2>Metadata Heaps</h2>
20
21         <p>ECMA CLI images contain four heaps that store different
22         kinds of information, these are:
23
24         <ul>
25                 <li>GUID heap (called #GUID) contains 128-bit GUIDs,
26                 you can get pointer to a GUID value by
27                 calling <a href="#api:mono_metadata_guid_heap">mono_metadata_guid_heap</a>.
28
29                 <li>User string heap (called #US), it contains user
30                 visible strings, you can fetch a string from this heap
31                 by calling
32                 <a href="#api:mono_metadata_user_string">mono_metadata_user_string</a>.
33
34                 <li>Blob heap (called #blob), it contains binary
35                 blobs of data, you can get a blob
36                 by <a href="#api:mono_metadata_blob_heap">mono_metadata_blob_heap</a>.
37                 You can determine the size of the blob using
38                 the <a href="#api:mono_metadata_decode_blob_size">mono_metadata_decode_blob_size</a>. 
39         
40         </ul>
41
42         <p>The ECMA file format also has an extra section called the
43         "#~" stream, this stream is the one that holds the metadata
44         tables.   There is a high-level API to get access to the
45         contents of this API, described in the
46         section <a href="#metadata-tables">Metadata Tables</a>.
47         
48 <h4><a name="api:mono_metadata_guid_heap">mono_metadata_guid_heap</a></h4>
49 <h4><a name="api:mono_metadata_string_heap">mono_metadata_string_heap</a></h4>
50 <h4><a name="api:mono_metadata_blob_heap">mono_metadata_blob_heap</a></h4>
51 <h4><a name="api:mono_metadata_user_string">mono_metadata_user_string</a></h4>
52 <h4><a name="api:mono_metadata_decode_blob_size">mono_metadata_decode_blob_size</a></h4>
53
54 <a name="metadata-tables"/>
55 <h2>Metadata Tables</h2>
56
57         <p>Metadata is encoded in a number of tables included on every
58         CIL image.   These tables contain type definitions, member
59         definitions and so on, these constants are defined in the ECMA 335
60         specification Partition II section 22.   The following table
61         shows the C constants defined in the Mono runtime and how they
62         map to the equivalent ECMA CLI metadata table:
63
64         <center>
65         <table border=1>
66           <thead>
67             <td>
68                <b>ECMA CLI Table Name</b>
69             </td>
70             <td>
71             <b>C Constant Name</b>
72             </td>
73             <td>
74                <b>Table Schema (Array Size + Columns Constants)</b>
75             </td>
76           </thead>
77 <td>Assembly</td><td>MONO_TABLE_ASSEMBLY</td><td>
78 Array size: 
79 MONO_ASSEMBLY_SIZE
80 <ul>
81         <li>MONO_ASSEMBLY_HASH_ALG
82         <li>MONO_ASSEMBLY_MAJOR_VERSION
83         <li>MONO_ASSEMBLY_MINOR_VERSION
84         <li>MONO_ASSEMBLY_BUILD_NUMBER
85         <li>MONO_ASSEMBLY_REV_NUMBER
86         <li>MONO_ASSEMBLY_FLAGS
87         <li>MONO_ASSEMBLY_PUBLIC_KEY
88         <li>MONO_ASSEMBLY_NAME
89         <li>MONO_ASSEMBLY_CULTURE
90 </ul>
91 </td>
92 </tr>
93
94 <td>AssemblyOS</td><td>MONO_TABLE_ASSEMBLYOS</td><td>
95 Array size: 
96 MONO_ASSEMBLYOS_SIZE
97 <ul>
98         <li>MONO_ASSEMBLYOS_PLATFORM
99         <li>MONO_ASSEMBLYOS_MAJOR_VERSION
100         <li>MONO_ASSEMBLYOS_MINOR_VERSION
101 </ul>
102 </td>
103 </tr>
104
105 <td>AssemblyProcessor</td><td>MONO_TABLE_ASSEMBLYPROCESSOR</td><td>Array
106 size: MONO_ASSEMBLYPROCESSOR_SIZE
107 <ul>
108         <li>MONO_ASSEMBLY_PROCESSOR
109 </ul>
110 </td>
111 </tr>
112
113 <td>AssemblyRef</td><td>MONO_TABLE_ASSEMBLYREF</td><td>
114 Array size: 
115 MONO_ASSEMBLYREF_SIZE
116 <ul>
117         <li>MONO_ASSEMBLYREF_MAJOR_VERSION
118         <li>MONO_ASSEMBLYREF_MINOR_VERSION
119         <li>MONO_ASSEMBLYREF_BUILD_NUMBER
120         <li>MONO_ASSEMBLYREF_REV_NUMBER
121         <li>MONO_ASSEMBLYREF_FLAGS
122         <li>MONO_ASSEMBLYREF_PUBLIC_KEY
123         <li>MONO_ASSEMBLYREF_NAME
124         <li>MONO_ASSEMBLYREF_CULTURE
125         <li>MONO_ASSEMBLYREF_HASH_VALUE
126 </ul>
127 </td>
128 </tr>
129
130 <td>AssemblyRefProcessor</td><td>MONO_TABLE_ASSEMBLYREFPROCESSOR</td><td>Array
131 size: MONO_ASSEMBLYREFPROC_SIZE
132 <ul>
133         <li>MONO_ASSEMBLYREFPROC_PROCESSOR
134         <li>MONO_ASSEMBLYREFPROC_ASSEMBLYREF
135 </ul>
136 </td>
137 </tr>
138
139 <td>AssemblyRefOS</td><td>MONO_TABLE_ASSEMBLYREFOS</td><td>
140 Array size: 
141         <li>MONO_ASSEMBLYREFOS_SIZE
142 <ul>
143         <li>MONO_ASSEMBLYREFOS_PLATFORM
144         <li>MONO_ASSEMBLYREFOS_MAJOR_VERSION
145         <li>MONO_ASSEMBLYREFOS_MINOR_VERSION
146         <li>MONO_ASSEMBLYREFOS_ASSEMBLYREF
147 </ul>
148 </td>
149 </tr>
150
151 <td>ClassLayout</td><td>MONO_TABLE_CLASSLAYOUT</td><td>
152 Array size: 
153 MONO_CLASSLAYOUT_SIZE
154 <ul>
155         <li>MONO_CLASS_LAYOUT_PACKING_SIZE
156         <li>MONO_CLASS_LAYOUT_CLASS_SIZE
157         <li>MONO_CLASS_LAYOUT_PARENT
158 </ul>
159 </td>
160 </tr>
161
162 <td>Constant</td><td>MONO_TABLE_CONSTANT</td><td>
163 Array size: 
164 MONO_CONSTANT_SIZE
165 <ul>
166         <li>MONO_CONSTANT_TYPE
167         <li>MONO_CONSTANT_PADDING
168         <li>MONO_CONSTANT_PARENT
169         <li>MONO_CONSTANT_VALUE
170 </ul>
171 </td>
172 </tr>
173
174 <td>CustomAttribute</td><td>MONO_TABLE_CUSTOMATTRIBUTE</td><td>
175 Array size:
176 MONO_CUSTOM_ATTR_SIZE
177 <ul>
178         <li>MONO_CUSTOM_ATTR_PARENT
179         <li>MONO_CUSTOM_ATTR_TYPE
180         <li>MONO_CUSTOM_ATTR_VALUE
181 </ul>
182 </td>
183 </tr>
184
185 <td>DeclSecurity</td><td>MONO_TABLE_DECLSECURITY</td><td>
186 Array size: 
187 MONO_DECL_SECURITY_SIZE
188 <ul>
189         <li>MONO_DECL_SECURITY_ACTION
190         <li>MONO_DECL_SECURITY_PARENT
191         <li>MONO_DECL_SECURITY_PERMISSIONSET
192 </ul>
193 </td>
194 </tr>
195
196 <td>EventMap</td><td>MONO_TABLE_EVENTMAP</td><td>
197 Array size: 
198 MONO_EVENT_MAP_SIZE
199 <ul>
200         <li>MONO_EVENT_MAP_PARENT
201         <li>MONO_EVENT_MAP_EVENTLIST
202 </ul>
203 </td>
204 </tr>
205
206 <td>EventPtr</td><td>MONO_TABLE_EVENT_POINTER</td><td>
207 Array size: 
208 MONO_EVENT_POINTER_SIZE
209 <ul>
210         <li>MONO_EVENT_POINTER_EVENT
211 </ul>
212 </td>
213 </tr>
214
215 <td>Event</td><td>MONO_TABLE_EVENT</td><td>
216 Array size:  MONO_EVENT_SIZE
217 <ul>
218         <li>MONO_EVENT_FLAGS
219         <li>MONO_EVENT_NAME
220         <li>MONO_EVENT_TYPE
221 </ul>
222 </td>
223 </tr>
224
225 <td>ExportedType</td><td>MONO_TABLE_EXPORTEDTYPE</td><td>
226 Array size: 
227 MONO_EXPORTEDTYPE_SIZE
228 <ul>
229         <li>MONO_EXP_TYPE_FLAGS
230         <li>MONO_EXP_TYPE_TYPEDEF
231         <li>MONO_EXP_TYPE_NAME
232         <li>MONO_EXP_TYPE_NAMESPACE
233         <li>MONO_EXP_TYPE_IMPLEMENTATION
234 </ul>
235 </td>
236 </tr>
237
238 <td>Field</td><td>MONO_TABLE_FIELD</td><td>
239 Array size:  MONO_FIELD_SIZE
240 <ul>
241         <li>MONO_FIELD_FLAGS
242         <li>MONO_FIELD_NAME
243         <li>MONO_FIELD_SIGNATURE
244 </ul>
245 </td>
246 </tr>
247
248 <td>FieldLayoutt</td><td>MONO_TABLE_FIELDLAYOUT</td><td>
249 Array size: 
250 MONO_FIELDLAYOUT_SIZE
251 <ul>
252         <li>MONO_FIELD_LAYOUT_OFFSET
253         <li>MONO_FIELD_LAYOUT_FIELD
254 </ul>
255 </td>
256 </tr>
257
258 <td>FieldMarshal</td><td>MONO_TABLE_FIELDMARSHAL</td><td>
259 Array size: 
260 MONO_FIELD_MARSHAL_SIZE
261 <ul>
262         <li>MONO_FIELD_MARSHAL_PARENT
263         <li>MONO_FIELD_MARSHAL_NATIVE_TYPE
264 </ul>
265 </td>
266 </tr>
267
268 <td>FieldPtr</td><td>MONO_TABLE_FIELD_POINTER</td><td>
269 Array size: 
270 MONO_FIELD_POINTER_SIZE
271 <ul>
272         <li>MONO_FIELD_POINTER_FIELD
273 </ul>
274 </td>
275 </tr>
276
277 <td>FieldRVA</td><td>MONO_TABLE_FIELDRVA</td><td>
278 Array size: 
279 MONO_FIELDRVA_SIZE
280 <ul>
281         <li>MONO_FIELD_RVA_RVA
282         <li>MONO_FIELD_RVA_FIELD
283 </ul>
284 </td>
285 </tr>
286
287 <td>File</td><td>MONO_TABLE_FILE</td><td>
288 Array size:  MONO_FILE_SIZE
289 <ul>
290         <li>MONO_FILE_FLAGS
291         <li>MONO_FILE_NAME
292         <li>MONO_FILE_HASH_VALUE
293 </ul>
294 </td>
295 </tr>
296
297 <td>GenericParam</td><td>MONO_TABLE_GENERICPARAM</td><td>
298 Array size: 
299 MONO_GENERICPARAM_SIZE
300 <ul>
301         <li>MONO_GENERICPARAM_NUMBER
302         <li>MONO_GENERICPARAM_FLAGS
303         <li>MONO_GENERICPARAM_OWNER
304         <li>MONO_GENERICPARAM_NAME
305 </ul>
306 </td>
307 </tr>
308
309 <td>GenericParamConstraint</td><td>MONO_TABLE_GENERICPARAMCONSTRAINT</td><td>Array
310 size: MONO_GENERICPARAMCONSTRAINT_SIZE
311 <ul>
312         <li>MONO_GENPARCONSTRAINT_GENERICPAR
313         <li>MONO_GENPARCONSTRAINT_CONSTRAINT
314 </ul>
315 </td>
316
317 <tr>
318 <td>ImplMap</td><td>MONO_TABLE_IMPLMAP</td><td>
319 Array size: 
320 MONO_IMPLMAP_SIZE
321 <ul>
322         <li>MONO_IMPLMAP_FLAGS
323         <li>MONO_IMPLMAP_MEMBER
324         <li>MONO_IMPLMAP_NAME
325         <li>MONO_IMPLMAP_SCOPE
326 </ul>
327 </td>
328 </tr>
329
330
331 <td>InterfaceImpl</td><td>MONO_TABLE_INTERFACEIMPL</td><td>
332 Array size: 
333         <li>MONO_INTERFACEIMPL_SIZE
334 <ul>
335         <li>MONO_INTERFACEIMPL_CLASS
336         <li>MONO_INTERFACEIMPL_INTERFACE
337 </ul>
338 </td>
339 </tr>
340
341
342 <td>ManifestResource</td><td>MONO_TABLE_MANIFESTRESOURCE</td><td>Array
343 size: MONO_MANIFESTRESOURCE_SIZE
344 <ul>
345         <li>MONO_MANIFEST_OFFSET
346         <li>MONO_MANIFEST_FLAGS
347         <li>MONO_MANIFEST_NAME
348         <li>MONO_MANIFEST_IMPLEMENTATION
349 </ul>
350 </td>
351 </tr>
352
353 <tr>
354 <td>MemberRef</td><td>MONO_TABLE_MEMBERREF</td><td>
355 Array size: 
356 MONO_MEMBERREF_SIZE
357 <ul>
358         <li>MONO_MEMBERREF_CLASS
359         <li>MONO_MEMBERREF_NAME
360         <li>MONO_MEMBERREF_SIGNATURE
361 </ul>
362 </td>
363 </tr>
364
365 <td>MethodImpl</td><td>MONO_TABLE_METHODIMPL</td><td>
366 Array size: 
367 MONO_METHODIMPL_SIZE
368 <ul>
369         <li>MONO_METHODIMPL_CLASS
370         <li>MONO_METHODIMPL_BODY
371         <li>MONO_METHODIMPL_DECLARATION
372 </ul>
373 </td>
374 </tr>
375
376
377 <td>MethodSpec</td><td>MONO_TABLE_METHODSPEC</td><td>
378 Array size: 
379 MONO_METHODSPEC_SIZE
380 <ul>
381         <li>MONO_METHODSPEC_METHOD
382         <li>MONO_METHODSPEC_SIGNATURE
383 </ul>
384 </td>
385 </tr>
386 <tr>
387 <td>MethodSemantics</td><td>MONO_TABLE_METHODSEMANTICS</td><td>Array
388 size: MONO_METHOD_SEMA_SIZE
389 <ul>
390         <li>MONO_METHOD_SEMA_SEMANTICS
391         <li>MONO_METHOD_SEMA_METHOD
392         <li>MONO_METHOD_SEMA_ASSOCIATION
393 </ul>
394 </td>
395 </tr>
396
397 <td>Moduleref</td><td>MONO_TABLE_MODULEREF</td><td>
398 Array size: 
399 MONO_MODULEREF_SIZE
400 <ul>
401         <li>MONO_MODULEREF_NAME
402 </ul>
403 </td>
404 </tr>
405
406 <tr>
407 <td>Module</td><td>MONO_TABLE_MODULE</td><td>
408 Array size: 
409 MONO_MODULE_SIZE
410 <br>
411 Columns:
412 <ul>
413         <li>MONO_MODULE_GENERATION
414         <li>MONO_MODULE_NAME
415         <li>MONO_MODULE_MVID
416         <li>MONO_MODULE_ENC
417         <li>MONO_MODULE_ENCBASE
418 </ul>
419 </td>
420 </tr>
421
422 <td>TypeRef</td><td>MONO_TABLE_TYPEREF</td><td>
423 Array size: 
424 MONO_TYPEREF_SIZE
425 <ul>
426         <li>MONO_TYPEREF_SCOPE
427         <li>MONO_TYPEREF_NAME
428         <li>MONO_TYPEREF_NAMESPACE
429 </ul>
430 </td>
431 </tr>
432
433 <tr>
434 <td>MethodPtr</td><td>MONO_TABLE_METHOD_POINTER</td><td>
435 Array size: 
436 MONO_METHOD_POINTER_SIZE
437 <ul>
438         <li>MONO_METHOD_POINTER_METHOD
439 </ul>
440 </td>
441 </tr>
442
443 <td>Method</td><td>MONO_TABLE_METHOD</td><td>
444 Array size: 
445 MONO_METHOD_SIZE
446 <ul>
447         <li>MONO_METHOD_RVA
448         <li>MONO_METHOD_IMPLFLAGS
449         <li>MONO_METHOD_FLAGS
450         <li>MONO_METHOD_NAME
451         <li>MONO_METHOD_SIGNATURE
452         <li>MONO_METHOD_PARAMLIST
453 </ul>
454 </td>
455 </tr>
456
457 <tr>
458 <td>NestedClass</td><td>MONO_TABLE_NESTEDCLASS</td><td>
459 Array size: 
460 MONO_NESTEDCLASS_SIZE
461 <ul>
462         <li>MONO_NESTED_CLASS_NESTED
463         <li>MONO_NESTED_CLASS_ENCLOSING
464 </ul>
465 </td>
466 </tr>
467
468 <tr>
469 <td>ParamPtr</td><td>MONO_TABLE_PARAM_POINTER</td><td>
470 Array size: 
471 MONO_PARAM_POINTER_SIZE
472 <ul>
473         <li>MONO_PARAM_POINTER_PARAM
474 </ul>
475 </td>
476 </tr>
477
478 <td>Param</td><td>MONO_TABLE_PARAM</td><td>
479 Array size:  MONO_PARAM_SIZE
480 <ul>
481         <li>MONO_PARAM_FLAGS
482         <li>MONO_PARAM_SEQUENCE
483         <li>MONO_PARAM_NAME
484 </ul>
485 </td>
486 </tr>
487
488 <td>PropertyMap</td><td>MONO_TABLE_PROPERTYMAP</td><td>
489 Array size: 
490 MONO_PROPERTY_MAP_SIZE
491 <ul>
492         <li>MONO_PROPERTY_MAP_PARENT
493         <li>MONO_PROPERTY_MAP_PROPERTY_LIST
494 </ul>
495 </td>
496 </tr>
497
498 <td>PropertyPtr</td><td>MONO_TABLE_PROPERTY_POINTER</td><td>Array
499 size: MONO_PROPERTY_POINTER_SIZE
500 <ul>
501         <li>MONO_PROPERTY_POINTER_PROPERTY
502 </ul>
503 </td>
504 </tr>
505
506 <td>Property</td><td>MONO_TABLE_PROPERTY</td><td>
507 Array size: 
508 MONO_PROPERTY_SIZE
509 <ul>
510         <li>MONO_PROPERTY_FLAGS
511         <li>MONO_PROPERTY_NAME
512         <li>MONO_PROPERTY_TYPE
513 </ul>
514 </td>
515 </tr>
516 <tr>
517 <td>StandaloneSig</td><td>MONO_TABLE_STANDALONESIG</td><td>
518 Array size: 
519         <li>MONO_STAND_ALONE_SIGNATURE_SIZE
520 <ul>
521         <li>MONO_STAND_ALONE_SIGNATURE
522 </ul>
523 </td>
524 </tr>
525
526 <tr>
527 <td>TypeDef</td><td>MONO_TABLE_TYPEDEF</td><td>
528 Array size: 
529 MONO_TYPEDEF_SIZE
530 <ul>
531         <li>MONO_TYPEDEF_FLAGS
532         <li>MONO_TYPEDEF_NAME
533         <li>MONO_TYPEDEF_NAMESPACE
534         <li>MONO_TYPEDEF_EXTENDS
535         <li>MONO_TYPEDEF_FIELD_LIST
536         <li>MONO_TYPEDEF_METHOD_LIST
537 </ul>
538 </td>
539 </tr>
540
541 <tr>
542 <td>TypeSpec</td><td>MONO_TABLE_TYPESPEC</td><td>
543 Array size: 
544 MONO_TYPESPEC_SIZE
545 <ul>
546         <li>MONO_TYPESPEC_SIGNATURE
547 </ul>
548 </td>
549 </tr>
550
551         </table>
552         </center>
553
554         <p>Each table can contain zero or more rows, you must call the
555         <a href="#api:mono_metadata_table_rows">mono_metadata_table_rows</a>
556         to obtain the number of rows in a table, and then you can
557         extract individual row values by using
558         the <a href="#api:mono_metadata_decode_row">mono_metadata_decode_row</a>
559         or
560         the <a href="#api:mono_metadata_decode_row_col">mono_metadata_decode_row_col</a>.
561         When decoding rows you must provide an guint32 array large
562         enough to hold as many columns as the table contains.
563         
564         <p>The metadata tables are stored in the MonoImage, you obtain
565         a pointer to the MonoTableInfo by calling
566         the <a href="#api:mono_image_get_table_info">mono_image_get_table_info</a>
567         and then you can scan those tables, for example:
568
569         <pre class="prettyprint">
570         /*
571          * Dumps a few fields from the AssemblyRef table
572          */
573         void DumpAssemblyRefs (MonoImage *image)
574         {
575                 /* Get a pointer to the AssemblyRef metadata table */
576                 MonoTableInfo *t = mono_image_get_table_info (image, MONO_TABLE_ASSEMBLYREF);
577
578                 /* Fetch the number of rows available in the table */
579                 int rows = mono_table_info_get_rows (t);
580                 int i;
581
582                 /* For each row, print some of its values */
583                 for (i = 0; i &lt; rows; i++){
584                         /* Space where we extract one row from the metadata table */
585                         guint32 cols [MONO_ASSEMBLYREF_SIZE];
586
587                         /* Extract the row into the array cols */
588                         mono_metadata_decode_row (t, i, cols, MONO_ASSEMBLYREF_SIZE);
589
590                         fprintf (output, "%d: Version=%d.%d.%d.%d\n\tName=%s\n", i + 1,
591                                 cols [MONO_ASSEMBLYREF_MAJOR_VERSION],
592                                 cols [MONO_ASSEMBLYREF_MINOR_VERSION],
593                                 cols [MONO_ASSEMBLYREF_BUILD_NUMBER],
594                                 cols [MONO_ASSEMBLYREF_REV_NUMBER],
595                                 mono_metadata_string_heap (image, cols [MONO_ASSEMBLYREF_NAME]));
596                 }
597         }
598         </pre>
599
600         <p>The above program shows the following output when ran on
601         the C# compiler:
602
603         <pre>
604         1: Version=1.0.5000.0
605                 Name=mscorlib
606         2: Version=1.0.5000.0
607                 Name=System
608         3: Version=1.0.5000.0
609                 Name=System.Xml
610         </pre>
611
612         <p>
613
614 <h3>Metadata Tables API</h3>
615
616         <p>These are the APIs for dealing with tables:
617
618 <h4><a name="api:mono_image_get_table_info">mono_image_get_table_info</a></h4>
619 <h4><a name="api:mono_image_get_table_rows">mono_image_get_table_rows</a></h4>
620 <h4><a name="api:mono_metadata_decode_row_col">mono_metadata_decode_row_col</a></h4>
621 <h4><a name="api:mono_metadata_decode_row">mono_metadata_decode_row</a></h4>
622 <h4><a name="api:mono_metadata_compute_size">mono_metadata_compute_size</a></h4>
623 <h4><a name="api:mono_metadata_custom_attrs_from_index">mono_metadata_custom_attrs_from_index</a></h4>
624 <h4><a name="api:mono_metadata_decode_signed_value">mono_metadata_decode_signed_value</a></h4>
625 <h4><a name="api:mono_metadata_decode_value">mono_metadata_decode_value</a></h4>
626 <h4><a name="api:mono_metadata_encode_value">mono_metadata_encode_value</a></h4>
627         
628 <h2>Metadata access API</h2>
629
630         <p>This is the low-level API for accessing the metadata
631         images.
632         
633 <h4><a name="api:mono_pe_file_open">mono_pe_file_open</a></h4> 
634 <h4><a name="api:mono_metadata_events_from_typedef">mono_metadata_events_from_typedef</a></h4>
635 <h4><a name="api:mono_metadata_decode_table_row">mono_metadata_decode_table_row</a></h4>
636 <h4><a name="api:mono_metadata_decode_table_row_col">mono_metadata_decode_table_row_col</a></h4>
637 <h4><a name="api:mono_metadata_field_info">mono_metadata_field_info</a></h4>
638 <h4><a name="api:mono_metadata_free_array">mono_metadata_free_array</a></h4>
639 <h4><a name="api:mono_metadata_free_marshal_spec">mono_metadata_free_marshal_spec</a></h4>
640 <h4><a name="api:mono_metadata_free_mh">mono_metadata_free_mh</a></h4>
641 <h4><a name="api:mono_metadata_free_type">mono_metadata_free_type</a></h4>
642 <h4><a name="api:mono_metadata_get_constant_index">mono_metadata_get_constant_index</a></h4>
643 <h4><a name="api:mono_metadata_get_marshal_info">mono_metadata_get_marshal_info</a></h4>
644 <h4><a name="api:mono_metadata_implmap_from_method">mono_metadata_implmap_from_method</a></h4>
645 <h4><a name="api:mono_metadata_interfaces_from_typedef">mono_metadata_interfaces_from_typedef</a></h4>
646 <h4><a name="api:mono_metadata_locate">mono_metadata_locate</a></h4>
647 <h4><a name="api:mono_metadata_locate_token">mono_metadata_locate_token</a></h4>
648 <h4><a name="api:mono_metadata_methods_from_event">mono_metadata_methods_from_event</a></h4>
649 <h4><a name="api:mono_metadata_methods_from_property">mono_metadata_methods_from_property</a></h4>
650 <h4><a name="api:mono_metadata_nested_in_typedef">mono_metadata_nested_in_typedef</a></h4>
651 <h4><a name="api:mono_metadata_nesting_typedef">mono_metadata_nesting_typedef</a></h4>
652 <h4><a name="api:mono_metadata_packing_from_typedef">mono_metadata_packing_from_typedef</a></h4>
653 <h4><a name="api:mono_metadata_properties_from_typedef">mono_metadata_properties_from_typedef</a></h4>
654 <h4><a name="api:mono_metadata_token_from_dor">mono_metadata_token_from_dor</a></h4>
655 <h4><a name="api:mono_metadata_translate_token_index">mono_metadata_translate_token_index</a></h4>
656 <h4><a name="api:mono_metadata_typedef_from_field">mono_metadata_typedef_from_field</a></h4>
657 <h4><a name="api:mono_metadata_typedef_from_method">mono_metadata_typedef_from_method</a></h4>
658 <h4><a name="api:mono_metadata_type_equal">mono_metadata_type_equal</a></h4>
659 <h4><a name="api:mono_metadata_type_hash">mono_metadata_type_hash</a></h4>
660 <h4><a name="api:mono_metadata_declsec_from_index">mono_metadata_declsec_from_index</a></h4>
661 <h4><a name="api:mono_metadata_free_method_signature">mono_metadata_free_method_signature</a></h4>
662
663 <h3>Retrieving Objects from Tokens</h3>
664
665 <h4><a name="api:mono_metadata_parse_array">mono_metadata_parse_array</a></h4>
666 <h4><a name="api:mono_metadata_parse_custom_mod">mono_metadata_parse_custom_mod</a></h4>
667 <h4><a name="api:mono_metadata_parse_field_type">mono_metadata_parse_field_type</a></h4>
668 <h4><a name="api:mono_metadata_parse_marshal_spec">mono_metadata_parse_marshal_spec</a></h4>
669 <h4><a name="api:mono_metadata_parse_method_signature">mono_metadata_parse_method_signature</a></h4>
670 <h4><a name="api:mono_metadata_parse_mh">mono_metadata_parse_mh</a></h4>
671 <h4><a name="api:mono_metadata_parse_param">mono_metadata_parse_param</a></h4>
672 <h4><a name="api:mono_metadata_parse_ret_type">mono_metadata_parse_ret_type</a></h4>
673 <h4><a name="api:mono_metadata_parse_signature">mono_metadata_parse_signature</a></h4>
674 <h4><a name="api:mono_metadata_parse_typedef_or_ref">mono_metadata_parse_typedef_or_ref</a></h4>
675 <h4><a name="api:mono_metadata_parse_type">mono_metadata_parse_type</a></h4>
676
677 <h2>Generics Support</h2>
678
679 <h4><a name="api:mono_metadata_generic_class_equal">mono_metadata_generic_class_equal</a></h4>
680 <h4><a name="api:mono_metadata_generic_class_hash">mono_metadata_generic_class_hash</a></h4>
681 <h4><a name="api:mono_metadata_generic_class_is_valuetype">mono_metadata_generic_class_is_valuetype</a></h4> 
682
683 <h2>Tokens</h2>
684
685 <h4><a name="api:mono_ldtoken">mono_ldtoken</a></h4>
686 <h4><a name="api:mono_ldstr">mono_ldstr</a></h4>
687 <h4><a name="api:mono_exception_from_token">mono_exception_from_token</a></h4> 
688
689 <h2>OpCodes</h2>
690
691 <h4><a name="api:mono_opcode_name">mono_opcode_name</a></h4>
692 <h4><a name="api:mono_opcode_value">mono_opcode_value</a></h4>
693