Tables.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. #pragma once
  2. #include <stdint.h>
  3. namespace hybridclr
  4. {
  5. namespace metadata
  6. {
  7. enum class TableType
  8. {
  9. MODULE,
  10. TYPEREF,
  11. TYPEDEF,
  12. FIELD_POINTER,
  13. FIELD,
  14. METHOD_POINTER,
  15. METHOD,
  16. PARAM_POINTER,
  17. PARAM,
  18. INTERFACEIMPL,
  19. MEMBERREF, /* 0xa */
  20. CONSTANT,
  21. CUSTOMATTRIBUTE,
  22. FIELDMARSHAL,
  23. DECLSECURITY,
  24. CLASSLAYOUT,
  25. FIELDLAYOUT, /* 0x10 */
  26. STANDALONESIG,
  27. EVENTMAP,
  28. EVENT_POINTER,
  29. EVENT,
  30. PROPERTYMAP,
  31. PROPERTY_POINTER,
  32. PROPERTY,
  33. METHODSEMANTICS,
  34. METHODIMPL,
  35. MODULEREF, /* 0x1a */
  36. TYPESPEC,
  37. IMPLMAP,
  38. FIELDRVA,
  39. UNUSED6,
  40. UNUSED7,
  41. ASSEMBLY, /* 0x20 */
  42. ASSEMBLYPROCESSOR,
  43. ASSEMBLYOS,
  44. ASSEMBLYREF,
  45. ASSEMBLYREFPROCESSOR,
  46. ASSEMBLYREFOS,
  47. FILE,
  48. EXPORTEDTYPE,
  49. MANIFESTRESOURCE,
  50. NESTEDCLASS,
  51. GENERICPARAM, /* 0x2a */
  52. METHODSPEC,
  53. GENERICPARAMCONSTRAINT,
  54. UNUSED8,
  55. UNUSED9,
  56. UNUSED10,
  57. /* Portable PDB tables */
  58. DOCUMENT, /* 0x30 */
  59. METHODBODY,
  60. LOCALSCOPE,
  61. LOCALVARIABLE,
  62. LOCALCONSTANT,
  63. IMPORTSCOPE,
  64. STATEMACHINEMETHOD,
  65. CUSTOMDEBUGINFORMATION,
  66. };
  67. // 0
  68. struct TbModule
  69. {
  70. uint16_t generation;
  71. uint32_t name;
  72. uint32_t mvid;
  73. uint32_t encid;
  74. uint32_t encBaseId;
  75. };
  76. // 1
  77. struct TbTypeRef
  78. {
  79. uint32_t resolutionScope;
  80. uint32_t typeName;
  81. uint32_t typeNamespace;
  82. };
  83. // 2
  84. struct TbTypeDef
  85. {
  86. uint32_t flags;
  87. uint32_t typeName;
  88. uint32_t typeNamespace;
  89. uint32_t extends;
  90. uint32_t fieldList;
  91. uint32_t methodList;
  92. };
  93. // 3 FIELD_POINTER
  94. // 4
  95. struct TbField
  96. {
  97. uint32_t flags;
  98. uint32_t name;
  99. uint32_t signature;
  100. };
  101. // 5 METHOD_POINTER
  102. // 6
  103. struct TbMethod
  104. {
  105. uint32_t rva;
  106. uint16_t implFlags;
  107. uint16_t flags;
  108. uint32_t name;
  109. uint32_t signature;
  110. uint32_t paramList;
  111. };
  112. // 7 PARAM_POINTER
  113. // 8
  114. struct TbParam
  115. {
  116. uint16_t flags;
  117. uint16_t sequence;
  118. uint32_t name;
  119. };
  120. // 9
  121. struct TbInterfaceImpl
  122. {
  123. uint32_t classIdx;
  124. uint32_t interfaceIdx;
  125. };
  126. // 0xa
  127. struct TbMemberRef
  128. {
  129. uint32_t classIdx;
  130. uint32_t name;
  131. uint32_t signature;
  132. };
  133. struct TbConstant
  134. {
  135. uint8_t type; // 实际上占2字节
  136. uint32_t parent;
  137. uint32_t value;
  138. };
  139. struct TbCustomAttribute
  140. {
  141. uint32_t parent;
  142. uint32_t type;
  143. uint32_t value;
  144. };
  145. struct TbFieldMarshal
  146. {
  147. uint32_t parent;
  148. uint32_t nativeType;
  149. };
  150. struct TbDeclSecurity
  151. {
  152. uint16_t action;
  153. uint32_t parent;
  154. uint32_t permissionSet;
  155. };
  156. struct TbClassLayout
  157. {
  158. uint16_t packingSize;
  159. uint32_t classSize;
  160. uint32_t parent;
  161. };
  162. // 0x10
  163. struct TbFieldLayout
  164. {
  165. uint32_t offset;
  166. uint32_t field;
  167. };
  168. struct TbStandAloneSig
  169. {
  170. uint32_t signature; // 指向 blob heap的位置
  171. };
  172. struct TbEventMap
  173. {
  174. uint32_t parent;
  175. uint32_t eventList;
  176. };
  177. // 0x13 EVENT_POINTER
  178. // 0x14
  179. struct TbEvent
  180. {
  181. uint16_t eventFlags;
  182. uint32_t name;
  183. uint32_t eventType;
  184. };
  185. struct TbPropertyMap
  186. {
  187. uint32_t parent;
  188. uint32_t propertyList;
  189. };
  190. // PROPERTY_POINTER
  191. struct TbProperty
  192. {
  193. uint16_t flags;
  194. uint32_t name;
  195. uint32_t type;
  196. };
  197. struct TbMethodSemantics
  198. {
  199. uint16_t semantics;
  200. uint32_t method;
  201. uint32_t association;
  202. };
  203. struct TbMethodImpl
  204. {
  205. uint32_t classIdx;
  206. uint32_t methodBody;
  207. uint32_t methodDeclaration;
  208. };
  209. struct TbModuleRef
  210. {
  211. uint32_t name;
  212. };
  213. struct TbTypeSpec
  214. {
  215. uint32_t signature;
  216. };
  217. struct TbImplMap
  218. {
  219. uint16_t mappingFlags;
  220. uint32_t memberForwarded;
  221. uint32_t importName;
  222. uint32_t importScope;
  223. };
  224. struct TbFieldRVA
  225. {
  226. uint32_t rva;
  227. uint32_t field;
  228. };
  229. // UNUSED 6
  230. // UNUSED 7
  231. struct TbAssembly
  232. {
  233. uint32_t hashAlgId;
  234. uint16_t majorVersion;
  235. uint16_t minorVersion;
  236. uint16_t buildNumber;
  237. uint16_t revisionNumber;
  238. uint32_t flags;
  239. uint32_t publicKey;
  240. uint32_t name;
  241. uint32_t culture;
  242. };
  243. struct TbAssemblyProcessor
  244. {
  245. uint32_t processor;
  246. };
  247. struct TbAssemblyOS
  248. {
  249. uint32_t osPlatformID;
  250. uint32_t osMajorVersion;
  251. uint32_t osMinorVersion;
  252. };
  253. struct TbAssemblyRef
  254. {
  255. uint16_t majorVersion;
  256. uint16_t minorVersion;
  257. uint16_t buildNumber;
  258. uint16_t revisionNumber;
  259. uint32_t flags;
  260. uint32_t publicKeyOrToken;
  261. uint32_t name;
  262. uint32_t culture;
  263. uint32_t hashValue;
  264. };
  265. struct TbAssemblyRefProcessor
  266. {
  267. uint32_t processor;
  268. uint32_t assemblyRef;
  269. };
  270. struct TbAssemblyRefOS
  271. {
  272. uint32_t osPlatformID;
  273. uint32_t osMajorVersion;
  274. uint32_t osMinorVersion;
  275. uint32_t assemblyRef;
  276. };
  277. struct TbFile
  278. {
  279. uint32_t flags;
  280. uint32_t name;
  281. uint32_t hashValue;
  282. };
  283. struct TbExportedType
  284. {
  285. uint32_t flags;
  286. uint32_t typeDefId;
  287. uint32_t typeName;
  288. uint32_t typeNamespace;
  289. uint32_t implementation;
  290. };
  291. struct TbManifestResource
  292. {
  293. uint32_t offset;
  294. uint32_t flags;
  295. uint32_t name;
  296. uint32_t implementation;
  297. };
  298. struct TbNestedClass
  299. {
  300. uint32_t nestedClass;
  301. uint32_t enclosingClass;
  302. };
  303. struct TbGenericParam
  304. {
  305. uint16_t number;
  306. uint16_t flags;
  307. uint32_t owner;
  308. uint32_t name;
  309. };
  310. struct TbMethodSpec
  311. {
  312. uint32_t method;
  313. uint32_t instantiation;
  314. };
  315. struct TbGenericParamConstraint
  316. {
  317. uint32_t owner;
  318. uint32_t constraint;
  319. };
  320. // 以下这些都不是tables的类型
  321. // 但mono特殊处理一下,额外也加到这个表中
  322. struct TbSymbolDocument
  323. {
  324. uint32_t name;
  325. uint32_t hashAlgorithm;
  326. uint32_t hash;
  327. uint32_t language;
  328. };
  329. struct TbSymbolMethodBody
  330. {
  331. uint32_t document;
  332. uint32_t sequencePoints;
  333. };
  334. struct TbSymbolLocalScope
  335. {
  336. uint32_t method;
  337. uint32_t importScope;
  338. uint32_t variables;
  339. uint32_t constants;
  340. uint32_t startOffset;
  341. uint32_t length;
  342. };
  343. struct TbSymbolLocalVariable
  344. {
  345. uint16_t attributes;
  346. uint16_t index;
  347. uint32_t name;
  348. };
  349. struct TbSymbolConstant
  350. {
  351. uint32_t name;
  352. uint32_t signature;
  353. };
  354. struct TbSymbolImportScope
  355. {
  356. uint32_t parent;
  357. uint32_t imports;
  358. };
  359. struct TbSymbolStateMachineMethod
  360. {
  361. uint32_t moveNextMethod;
  362. uint32_t kickoffMethod;
  363. };
  364. struct TbSymbolCustomDebugInformation
  365. {
  366. uint32_t parent;
  367. uint32_t kind;
  368. uint32_t value;
  369. };
  370. }
  371. }