From 57b37711aeefb5068d6f47b7ab37a180ae650869 Mon Sep 17 00:00:00 2001 From: Katy Coe Date: Sun, 10 Jan 2021 02:38:11 +0100 Subject: [PATCH] DLL: Add static array initializer value preview --- Il2CppInspector.Common/Outputs/AssemblyShims.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Il2CppInspector.Common/Outputs/AssemblyShims.cs b/Il2CppInspector.Common/Outputs/AssemblyShims.cs index f7455de..64431e2 100644 --- a/Il2CppInspector.Common/Outputs/AssemblyShims.cs +++ b/Il2CppInspector.Common/Outputs/AssemblyShims.cs @@ -63,6 +63,7 @@ namespace Il2CppInspector.Outputs private TypeDef fieldOffsetAttribute; private TypeDef attributeAttribute; private TypeDef metadataOffsetAttribute; + private TypeDef metadataPreviewAttribute; private TypeDef tokenAttribute; // The namespace for our custom types @@ -115,6 +116,10 @@ namespace Il2CppInspector.Outputs metadataOffsetAttribute.Fields.Add(new FieldDefUser("Offset", stringField, FieldAttributes.Public)); metadataOffsetAttribute.AddDefaultConstructor(attributeCtorRef); + metadataPreviewAttribute = createAttribute("MetadataPreviewAttribute"); + metadataPreviewAttribute.Fields.Add(new FieldDefUser("Data", stringField, FieldAttributes.Public)); + metadataPreviewAttribute.AddDefaultConstructor(attributeCtorRef); + tokenAttribute = createAttribute("TokenAttribute"); tokenAttribute.Fields.Add(new FieldDefUser("Token", stringField, FieldAttributes.Public)); tokenAttribute.AddDefaultConstructor(attributeCtorRef); @@ -203,9 +208,17 @@ namespace Il2CppInspector.Outputs mField.Constant = new ConstantUser(field.DefaultValue); // Add offset attribute if no default value but metadata present - else if (field.HasFieldRVA) + else if (field.HasFieldRVA || field.IsLiteral) mField.AddAttribute(module, metadataOffsetAttribute, ("Offset", $"0x{field.DefaultValueMetadataAddress:X8}")); + // Static array initializer preview + if (field.HasFieldRVA) { + var preview = model.Package.Metadata.ReadBytes((long) field.DefaultValueMetadataAddress, 8); + var previewText = string.Join(" ", preview.Select(b => $"{b:x2}")); + + mField.AddAttribute(module, metadataPreviewAttribute, ("Data", previewText)); + } + // Field offset if (!field.IsLiteral && !field.IsStatic && field.Offset != 0) mField.AddAttribute(module, fieldOffsetAttribute, ("Offset", $"0x{field.Offset:X}")); @@ -215,7 +228,7 @@ namespace Il2CppInspector.Outputs // Add custom attribute attributes foreach (var ca in field.CustomAttributes) - AddCustomAttribute(module, mField, ca); + AddCustomAttribute(module, mField, ca); mType.Fields.Add(mField); return mField;