7 #ifndef RETDEC_FILEFORMAT_TYPES_DOTNET_HEADERS_METADATA_TABLES_H
8 #define RETDEC_FILEFORMAT_TYPES_DOTNET_HEADERS_METADATA_TABLES_H
11 #include <type_traits>
116 constexpr std::uint64_t
maskForBits(std::uint64_t bits)
const {
return (1ULL << bits) - 1; }
560 virtual const char*
what() const noexcept {
return "Invalid .NET record"; }
573 template <
typename T>
576 template <
typename T>
579 template <
typename T>
583 if (getIndexSize<T>(stream) == 2)
604 template <> std::uint8_t BaseRecord::loadUInt<std::uint8_t>(
const FileFormat* file, std::uint64_t& address);
605 template <> std::uint16_t BaseRecord::loadUInt<std::uint16_t>(
const FileFormat* file, std::uint64_t& address);
606 template <> std::uint32_t BaseRecord::loadUInt<std::uint32_t>(
const FileFormat* file, std::uint64_t& address);
618 generation = loadUInt<std::uint16_t>(file, address);
619 name = loadIndex<StringStreamIndex>(file, stream, address);
620 mvId = loadIndex<GuidStreamIndex>(file, stream, address);
621 encId = loadIndex<GuidStreamIndex>(file, stream, address);
622 encBaseId = loadIndex<GuidStreamIndex>(file, stream, address);
635 typeName = loadIndex<StringStreamIndex>(file, stream, address);
636 typeNamespace = loadIndex<StringStreamIndex>(file, stream, address);
663 flags = loadUInt<std::uint32_t>(file, address);
664 typeName = loadIndex<StringStreamIndex>(file, stream, address);
665 typeNamespace = loadIndex<StringStreamIndex>(file, stream, address);
666 extends = loadIndex<TypeDefOrRef>(file, stream, address);
667 fieldList = loadIndex<FieldTableIndex>(file, stream, address);
668 methodList = loadIndex<MethodDefTableIndex>(file, stream, address);
678 field = loadIndex<FieldTableIndex>(file, stream, address);
695 flags = loadUInt<std::uint16_t>(file, address);
696 name = loadIndex<StringStreamIndex>(file, stream, address);
697 signature = loadIndex<BlobStreamIndex>(file, stream, address);
707 method = loadIndex<MethodDefTableIndex>(file, stream, address);
730 rva = loadUInt<std::uint32_t>(file, address);
731 implFlags = loadUInt<std::uint16_t>(file, address);
732 flags = loadUInt<std::uint16_t>(file, address);
733 name = loadIndex<StringStreamIndex>(file, stream, address);
734 signature = loadIndex<BlobStreamIndex>(file, stream, address);
735 paramList = loadIndex<ParamTableIndex>(file, stream, address);
745 param = loadIndex<ParamTableIndex>(file, stream, address);
759 flags = loadUInt<std::uint16_t>(file, address);
760 sequence = loadUInt<std::uint16_t>(file, address);
761 name = loadIndex<StringStreamIndex>(file, stream, address);
772 classType = loadIndex<TypeDefTableIndex>(file, stream, address);
773 interfaceType = loadIndex<TypeDefOrRef>(file, stream, address);
785 classType = loadIndex<MemberRefParent>(file, stream, address);
786 name = loadIndex<StringStreamIndex>(file, stream, address);
787 signature = loadIndex<BlobStreamIndex>(file, stream, address);
799 type = loadUInt<std::uint8_t>(file, address);
801 parent = loadIndex<HasConstant>(file, stream, address);
802 value = loadIndex<BlobStreamIndex>(file, stream, address);
814 parent = loadIndex<HasCustomAttribute>(file, stream, address);
815 type = loadIndex<CustomAttributeType>(file, stream, address);
816 value = loadIndex<BlobStreamIndex>(file, stream, address);
827 parent = loadIndex<HasFieldMarshal>(file, stream, address);
828 nativeType = loadIndex<BlobStreamIndex>(file, stream, address);
840 action = loadUInt<std::uint16_t>(file, address);
841 parent = loadIndex<HasDeclSecurity>(file, stream, address);
842 permissionSet = loadIndex<BlobStreamIndex>(file, stream, address);
854 packingSize = loadUInt<std::uint16_t>(file, address);
855 classSize = loadUInt<std::uint32_t>(file, address);
856 parent = loadIndex<TypeDefTableIndex>(file, stream, address);
867 offset = loadUInt<std::uint32_t>(file, address);
868 field = loadIndex<FieldTableIndex>(file, stream, address);
878 signature = loadIndex<BlobStreamIndex>(file, stream, address);
889 parent = loadIndex<TypeDefTableIndex>(file, stream, address);
890 eventList = loadIndex<EventTableIndex>(file, stream, address);
902 eventFlags = loadUInt<std::uint16_t>(file, address);
903 name = loadIndex<StringStreamIndex>(file, stream, address);
904 eventType = loadIndex<TypeDefOrRef>(file, stream, address);
914 property = loadIndex<PropertyTableIndex>(file, stream, address);
925 parent = loadIndex<TypeDefTableIndex>(file, stream, address);
926 propertyList = loadIndex<PropertyTableIndex>(file, stream, address);
938 flags = loadUInt<std::uint16_t>(file, address);
939 name = loadIndex<StringStreamIndex>(file, stream, address);
940 type = loadIndex<BlobStreamIndex>(file, stream, address);
952 semantics = loadUInt<std::uint16_t>(file, address);
953 method = loadIndex<MethodDefTableIndex>(file, stream, address);
954 association = loadIndex<HasSemantics>(file, stream, address);
966 classType = loadIndex<TypeDefTableIndex>(file, stream, address);
967 methodBody = loadIndex<MethodDefOrRef>(file, stream, address);
978 name = loadIndex<StringStreamIndex>(file, stream, address);
988 signature = loadIndex<BlobStreamIndex>(file, stream, address);
1003 importName = loadIndex<StringStreamIndex>(file, stream, address);
1004 importScope = loadIndex<ModuleRefTableIndex>(file, stream, address);
1015 rva = loadUInt<std::uint32_t>(file, address);
1016 field = loadIndex<FieldTableIndex>(file, stream, address);
1027 token = loadUInt<std::uint32_t>(file, address);
1028 funcCode = loadUInt<std::uint32_t>(file, address);
1038 token = loadUInt<std::uint32_t>(file, address);
1056 hashAlgId = loadUInt<std::uint32_t>(file, address);
1059 buildNumber = loadUInt<std::uint16_t>(file, address);
1061 flags = loadUInt<std::uint32_t>(file, address);
1062 publicKey = loadIndex<BlobStreamIndex>(file, stream, address);
1063 name = loadIndex<StringStreamIndex>(file, stream, address);
1064 culture = loadIndex<StringStreamIndex>(file, stream, address);
1074 processor = loadUInt<std::uint32_t>(file, address);
1108 buildNumber = loadUInt<std::uint16_t>(file, address);
1110 flags = loadUInt<std::uint32_t>(file, address);
1112 name = loadIndex<StringStreamIndex>(file, stream, address);
1113 culture = loadIndex<StringStreamIndex>(file, stream, address);
1114 hashValue = loadIndex<BlobStreamIndex>(file, stream, address);
1125 processor = loadUInt<std::uint32_t>(file, address);
1126 assemblyRef = loadIndex<AssemblyRefTableIndex>(file, stream, address);
1142 assemblyRef = loadIndex<AssemblyRefTableIndex>(file, stream, address);
1154 flags = loadUInt<std::uint32_t>(file, address);
1155 name = loadIndex<StringStreamIndex>(file, stream, address);
1156 hashValue = loadIndex<BlobStreamIndex>(file, stream, address);
1170 flags = loadUInt<std::uint32_t>(file, address);
1171 typeDefId = loadUInt<std::uint32_t>(file, address);
1172 typeName = loadIndex<StringStreamIndex>(file, stream, address);
1173 typeNamespace = loadIndex<StringStreamIndex>(file, stream, address);
1174 implementation = loadIndex<Implementation>(file, stream, address);
1187 offset = loadUInt<std::uint32_t>(file, address);
1188 flags = loadUInt<std::uint32_t>(file, address);
1189 name = loadIndex<StringStreamIndex>(file, stream, address);
1190 implementation = loadIndex<Implementation>(file, stream, address);
1201 nestedClass = loadIndex<TypeDefTableIndex>(file, stream, address);
1202 enclosingClass = loadIndex<TypeDefTableIndex>(file, stream, address);
1215 number = loadUInt<std::uint16_t>(file, address);
1216 flags = loadUInt<std::uint16_t>(file, address);
1217 owner = loadIndex<TypeDefOrMethodDef>(file, stream, address);
1218 name = loadIndex<StringStreamIndex>(file, stream, address);
1229 method = loadIndex<MethodDefOrRef>(file, stream, address);
1230 instantiation = loadIndex<BlobStreamIndex>(file, stream, address);
1241 owner = loadIndex<GenericParamTableIndex>(file, stream, address);
1242 constraint = loadIndex<TypeDefOrRef>(file, stream, address);
bool get4Byte(std::uint64_t address, std::uint64_t &res, Endianness e=Endianness::UNKNOWN) const
Definition: byte_value_storage.cpp:321
bool get2Byte(std::uint64_t address, std::uint64_t &res, Endianness e=Endianness::UNKNOWN) const
Definition: byte_value_storage.cpp:303
Definition: archive_wrapper.h:19