also set rva value as dnlib InitialValue

This commit is contained in:
LukeFZ
2023-12-01 09:39:02 +01:00
parent 7120970ece
commit 5afe295ef0

View File

@@ -185,6 +185,9 @@ namespace Il2CppInspector.Outputs
Attributes = (TypeAttributes)type.Attributes Attributes = (TypeAttributes)type.Attributes
}; };
if (mType.IsExplicitLayout)
mType.ClassLayout = new ClassLayoutUser(1, (uint)type.Sizes.nativeSize);
// Add nested types // Add nested types
foreach (var nestedType in type.DeclaredNestedTypes) foreach (var nestedType in type.DeclaredNestedTypes)
mType.NestedTypes.Add(CreateTypeShallow(module, nestedType)); mType.NestedTypes.Add(CreateTypeShallow(module, nestedType));
@@ -265,12 +268,12 @@ namespace Il2CppInspector.Outputs
// Static array initializer preview // Static array initializer preview
if (field.HasFieldRVA) { if (field.HasFieldRVA) {
// Attempt to get field size // Attempt to get field size
var fieldSize = field.FieldType.Sizes.nativeSize; var fieldSize = field.FieldType.Sizes.nativeSize;
var preview = model.Package.Metadata.ReadBytes((long) field.DefaultValueMetadataAddress, fieldSize); var preview = model.Package.Metadata.ReadBytes((long) field.DefaultValueMetadataAddress, fieldSize);
var previewText = string.Join(" ", preview.Select(b => $"{b:x2}"));
mField.AddAttribute(module, metadataPreviewAttribute, ("Data", previewText)); mField.InitialValue = preview;
mField.AddAttribute(module, metadataPreviewAttribute, ("Data", Convert.ToHexString(preview)));
} }
// Field offset // Field offset
@@ -597,6 +600,9 @@ namespace Il2CppInspector.Outputs
.ToDictionary(t => t, t => (TypeDef)null); .ToDictionary(t => t, t => (TypeDef)null);
} }
// Used for resolving TypeRefs, needed for static array initializers
var ctx = ModuleDef.CreateModuleContext();
// Generate blank assemblies // Generate blank assemblies
// We have to do this before adding anything else so we can reference every module // We have to do this before adding anything else so we can reference every module
modules.Clear(); modules.Clear();
@@ -604,6 +610,7 @@ namespace Il2CppInspector.Outputs
foreach (var asm in model.Assemblies) { foreach (var asm in model.Assemblies) {
// Create assembly and add primary module to list // Create assembly and add primary module to list
var module = CreateAssembly(asm.ShortName); var module = CreateAssembly(asm.ShortName);
module.Context = ctx;
modules.Add(asm, module); modules.Add(asm, module);
} }