1
- using System . Collections . Generic ;
1
+ using System . Collections . Generic ;
2
2
using System . Diagnostics . CodeAnalysis ;
3
3
using System . Linq ;
4
4
using Cpp2IL . Core . Logging ;
@@ -51,6 +51,13 @@ public abstract class BaseKeyFunctionAddresses
51
51
52
52
private ApplicationAnalysisContext _appContext = null ! ; //Always initialized before used
53
53
54
+ private readonly HashSet < ulong > resolvedAddresses = new ( ) ;
55
+
56
+ public bool IsKeyFunctionAddress ( ulong address )
57
+ {
58
+ return address != 0 && resolvedAddresses . Contains ( address ) ;
59
+ }
60
+
54
61
private void FindExport ( string name , out ulong ptr )
55
62
{
56
63
Logger . Verbose ( $ "\t Looking for Exported { name } function...") ;
@@ -105,6 +112,7 @@ public void Find(ApplicationAnalysisContext applicationAnalysisContext)
105
112
AttemptInstructionAnalysisToFillGaps ( ) ;
106
113
107
114
FindThunks ( ) ;
115
+ InitializeResolvedAddresses ( ) ;
108
116
}
109
117
110
118
protected void TryGetInitMetadataFromException ( )
@@ -283,5 +291,45 @@ private void FindThunks()
283
291
protected virtual void Init ( ApplicationAnalysisContext context )
284
292
{
285
293
}
294
+
295
+ private void InitializeResolvedAddresses ( )
296
+ {
297
+ resolvedAddresses . Clear ( ) ;
298
+ resolvedAddresses . Add ( il2cpp_codegen_initialize_method ) ;
299
+ resolvedAddresses . Add ( il2cpp_codegen_initialize_runtime_metadata ) ;
300
+ resolvedAddresses . Add ( il2cpp_vm_metadatacache_initializemethodmetadata ) ;
301
+ resolvedAddresses . Add ( il2cpp_runtime_class_init_export ) ;
302
+ resolvedAddresses . Add ( il2cpp_runtime_class_init_actual ) ;
303
+ resolvedAddresses . Add ( il2cpp_object_new ) ;
304
+ resolvedAddresses . Add ( il2cpp_vm_object_new ) ;
305
+ resolvedAddresses . Add ( il2cpp_codegen_object_new ) ;
306
+ resolvedAddresses . Add ( il2cpp_array_new_specific ) ;
307
+ resolvedAddresses . Add ( il2cpp_vm_array_new_specific ) ;
308
+ resolvedAddresses . Add ( SzArrayNew ) ;
309
+ resolvedAddresses . Add ( il2cpp_type_get_object ) ;
310
+ resolvedAddresses . Add ( il2cpp_vm_reflection_get_type_object ) ;
311
+ resolvedAddresses . Add ( il2cpp_resolve_icall ) ;
312
+ resolvedAddresses . Add ( InternalCalls_Resolve ) ;
313
+
314
+ resolvedAddresses . Add ( il2cpp_string_new ) ;
315
+ resolvedAddresses . Add ( il2cpp_vm_string_new ) ;
316
+ resolvedAddresses . Add ( il2cpp_string_new_wrapper ) ;
317
+ resolvedAddresses . Add ( il2cpp_vm_string_newWrapper ) ;
318
+ resolvedAddresses . Add ( il2cpp_codegen_string_new_wrapper ) ;
319
+
320
+ resolvedAddresses . Add ( il2cpp_value_box ) ;
321
+ resolvedAddresses . Add ( il2cpp_vm_object_box ) ;
322
+
323
+ resolvedAddresses . Add ( il2cpp_object_unbox ) ;
324
+ resolvedAddresses . Add ( il2cpp_vm_object_unbox ) ;
325
+
326
+ resolvedAddresses . Add ( il2cpp_raise_exception ) ;
327
+ resolvedAddresses . Add ( il2cpp_vm_exception_raise ) ;
328
+ resolvedAddresses . Add ( il2cpp_codegen_raise_exception ) ;
329
+
330
+ resolvedAddresses . Add ( il2cpp_vm_object_is_inst ) ;
331
+
332
+ resolvedAddresses . Add ( AddrPInvokeLookup ) ;
333
+ }
286
334
}
287
- }
335
+ }
0 commit comments