Skip to content

Commit 17b799c

Browse files
ds5678SamboyCoding
authored andcommitted
Dont use the assembly name for resolution
1 parent b967875 commit 17b799c

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

Cpp2IL.Core/Model/Contexts/ApplicationAnalysisContext.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ public class ApplicationAnalysisContext : ContextWithDataStorage
7878
/// </summary>
7979
public bool HasFinishedInitializing { get; private set; }
8080

81+
private readonly Dictionary<Il2CppImageDefinition, AssemblyAnalysisContext> AssembliesByImageDefinition = new();
82+
8183
public ApplicationAnalysisContext(Il2CppBinary binary, Il2CppMetadata metadata)
8284
{
8385
Binary = binary;
@@ -100,6 +102,7 @@ public ApplicationAnalysisContext(Il2CppBinary binary, Il2CppMetadata metadata)
100102
var aac = new AssemblyAnalysisContext(assemblyDefinition, this);
101103
Assemblies.Add(aac);
102104
AssembliesByName[assemblyDefinition.AssemblyName.Name] = aac;
105+
AssembliesByImageDefinition[assemblyDefinition.Image] = aac;
103106
}
104107

105108
SystemTypes = new(this);
@@ -170,10 +173,22 @@ private void PopulateMethodsByAddressTable()
170173
return AssembliesByName[name];
171174
}
172175

176+
public AssemblyAnalysisContext? ResolveContextForAssembly(Il2CppImageDefinition? imageDefinition)
177+
{
178+
return imageDefinition is not null
179+
? AssembliesByImageDefinition[imageDefinition]
180+
: null;
181+
}
182+
183+
public AssemblyAnalysisContext? ResolveContextForAssembly(Il2CppAssemblyDefinition? assemblyDefinition)
184+
{
185+
return ResolveContextForAssembly(assemblyDefinition?.Image);
186+
}
187+
173188
public TypeAnalysisContext? ResolveContextForType(Il2CppTypeDefinition? typeDefinition)
174189
{
175190
return typeDefinition is not null
176-
? GetAssemblyByName(typeDefinition.DeclaringAssembly!.Name!)?.GetTypeByDefinition(typeDefinition)
191+
? AssembliesByImageDefinition[typeDefinition.DeclaringAssembly!].GetTypeByDefinition(typeDefinition)
177192
: null;
178193
}
179194

Cpp2IL.Core/Model/Contexts/ConcreteGenericMethodAnalysisContext.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ private ConcreteGenericMethodAnalysisContext(Cpp2IlMethodRef? methodRef, MethodA
121121

122122
private static AssemblyAnalysisContext ResolveDeclaringAssembly(Cpp2IlMethodRef methodRef, ApplicationAnalysisContext context)
123123
{
124-
return context.GetAssemblyByName(methodRef.DeclaringType.DeclaringAssembly!.Name!)
125-
?? throw new($"Unable to resolve declaring assembly {methodRef.DeclaringType.DeclaringAssembly.Name} for generic method {methodRef}");
124+
return context.ResolveContextForAssembly(methodRef.DeclaringType.DeclaringAssembly)
125+
?? throw new($"Unable to resolve declaring assembly {methodRef.DeclaringType.DeclaringAssembly?.Name} for generic method {methodRef}");
126126
}
127127

128128
private static TypeAnalysisContext ResolveDeclaringType(Cpp2IlMethodRef methodRef, AssemblyAnalysisContext declaringAssembly)

0 commit comments

Comments
 (0)