Add support for ThreadStatic fields

This commit is contained in:
LukeFZ
2023-12-01 07:08:48 +01:00
parent 227aefedef
commit 7e7d345c30
4 changed files with 16 additions and 2 deletions

View File

@@ -97,6 +97,7 @@ namespace Il2CppInspector.Outputs
var attributeCtorRef = new MemberRefUser(attributeTypeRef.Module, ".ctor", MethodSig.CreateInstance(module.CorLibTypes.Void), attributeTypeRef);
var stringField = new FieldSig(module.CorLibTypes.String);
var boolField = new FieldSig(module.CorLibTypes.Boolean);
// Create a type deriving from System.Attribute and add it to the assembly
TypeDefUser createAttribute(string name) {
@@ -121,6 +122,7 @@ namespace Il2CppInspector.Outputs
staticFieldOffsetAttribute = createAttribute("StaticFieldOffsetAttribute");
staticFieldOffsetAttribute.Fields.Add(new FieldDefUser("Offset", stringField, FieldAttributes.Public));
staticFieldOffsetAttribute.Fields.Add(new FieldDefUser("ThreadStatic", boolField, FieldAttributes.Public));
staticFieldOffsetAttribute.AddDefaultConstructor(attributeCtorRef);
attributeAttribute = createAttribute("AttributeAttribute");
@@ -257,7 +259,7 @@ namespace Il2CppInspector.Outputs
if (!field.IsStatic)
mField.AddAttribute(module, fieldOffsetAttribute, ("Offset", $"0x{field.Offset:X2}"));
else if (!field.IsLiteral)
mField.AddAttribute(module, staticFieldOffsetAttribute, ("Offset", $"0x{field.Offset:X2}"));
mField.AddAttribute(module, staticFieldOffsetAttribute, ("ThreadStatic", field.IsThreadStatic), ("Offset", $"0x{field.Offset:X2}"));
// Add token attribute
mField.AddAttribute(module, tokenAttribute, ("Token", $"0x{field.MetadataToken:X8}"));

View File

@@ -396,6 +396,9 @@ namespace Il2CppInspector.Outputs
if (field.IsNotSerialized)
sb.Append(prefix + "\t[NonSerialized]\n");
if (field.IsThreadStatic)
sb.Append(prefix + "\t[ThreadStatic]\n");
// Attributes
sb.Append(field.CustomAttributes.Where(a => a.AttributeType.FullName != FBAttribute).OrderBy(a => a.AttributeType.Name)
.ToString(scope, prefix + "\t", emitPointer: !SuppressMetadata, mustCompile: MustCompile));