Help! How do I get an instance of a class that inherits LazySingleton?

MIDDLE

Platinian
Original poster
Mar 16, 2020
9
3
3
23
[email protected]
I found a class that allows me to try implementing ESP and other functions, but it doesn't have static fields or methods that return its instance. However, it inherits from LazySingleton, which has a static field that returns T. Here are the two classes:
Code:
public abstract class LazySingleton<T> : MonoBehaviour, IDisposable // TypeDefIndex: 11
{
    // Fields
    private static MonoBehaviourRef<T> CFEDGEHEGEFGBFH; // 0x0
    private bool ECCFBBBEFCBHAFA; // 0x0

    // Properties
    public static T DBACHHHDDBACGAC { get; }

    // Methods

    // RVA: -1 Offset: -1 Slot: 4
    public void Dispose() { }
    /* GenericInstMethod :
    |
    |-RVA: 0x32CA204 Offset: 0x32C9204 VA: 0x32CA204
    |-LazySingleton<object>.Dispose
    */

    // RVA: -1 Offset: -1
    protected void .ctor() { }
    /* GenericInstMethod :
    |
    |-RVA: 0x32CA21C Offset: 0x32C921C VA: 0x32CA21C
    |-LazySingleton<object>..ctor
    */

    // RVA: -1 Offset: -1 Slot: 5
    protected virtual void EHDAHAGEBDCDHAA() { }
    /* GenericInstMethod :
    |
    |-RVA: 0x32CA224 Offset: 0x32C9224 VA: 0x32CA224
    |-LazySingleton<object>.EHDAHAGEBDCDHAA
    */

    // RVA: -1 Offset: -1
    public static bool FEFCCAAFDBBGCHD() { }
    /* GenericInstMethod :
    |
    |-RVA: 0x32CA2A0 Offset: 0x32C92A0 VA: 0x32CA2A0
    |-LazySingleton<object>.FEFCCAAFDBBGCHD
    */

    // RVA: -1 Offset: -1
    private void OnDestroy() { }
    /* GenericInstMethod :
    |
    |-RVA: 0x32CA2F0 Offset: 0x32C92F0 VA: 0x32CA2F0
    |-LazySingleton<object>.OnDestroy
    */

    // RVA: -1 Offset: -1 Slot: 6
    protected virtual void GHGDGBHGEFGGHDA() { }
    /* GenericInstMethod :
    |
    |-RVA: 0x32CA308 Offset: 0x32C9308 VA: 0x32CA308
    |-LazySingleton<object>.GHGDGBHGEFGGHDA
    */

    // RVA: -1 Offset: -1
    public static T BDBDAACEEHHGAEG() { }
    /* GenericInstMethod :
    |
    |-RVA: 0x32CA3B8 Offset: 0x32C93B8 VA: 0x32CA3B8
    |-LazySingleton<object>.BDBDAACEEHHGAEG
    */
}
Code:
public class PlayerManager : LazySingleton<PlayerManager> // TypeDefIndex: 5025
{
    // Fields
    private static ILogger CCHFDDAAGHAFBAF; // 0x0
    private int BAFDHGHGEEFBCDH; // 0x24
    private readonly Dictionary<int, PlayerController> FABHCCGHCCCEEDA; // 0x28
    private readonly HashSet<PlayerController> ADDEABCBEEFDHCF; // 0x30
    private readonly Dictionary<string, Material> BEEDACAAAACEDGC; // 0x38
    private readonly HashSet<AFFHFDECAHFDCFD> FHCDCGFBGHHHDCH; // 0x40
    [CompilerGenerated]
    private PlayerManager.FBEBAEADDGAGBEH FHAFEGAFFACHAGG; // 0x48
    [CompilerGenerated]
    private PlayerManager.FBEBAEADDGAGBEH BBHDGFFFCDEHGBD; // 0x50
    [CompilerGenerated]
    private Action<PlayerController, EDHFCGGAGFEDCAF> FFGCEHCDFDECBCH; // 0x58
    private readonly List<Type> BFABGCAGFEGHDEE; // 0x60
    private bool CHABHCEACCGEHCC; // 0x68
    [CompilerGenerated]
    private PlayerController <BBGDEBGCGEFAEDF>k__BackingField; // 0x70
    [CompilerGenerated]
    private PlayerController <FCGBEHEBADDFEHG>k__BackingField; // 0x78
    public Dictionary<string, FDGBHADBCHECHEC> Pools; // 0x80

    // Properties
    private static ILogger CAFCBADGEGACHCB { get; }
    public HashSet<PlayerController> AAGECHGBGHEAHCH { get; }
    internal PlayerController GHCCGDHDCAAFBCG { get; set; }
    public PlayerController DCCADEEACEDEFHH { get; set; }
    private bool CGEEEHHDGHAEBGA { get; }

    // Methods

    // RVA: 0x232E5E4 Offset: 0x232D5E4 VA: 0x232E5E4
    public void FGGHFHBHEDDFFHA(GameObject DAFAGCHFCDDGEGF) { }

    // RVA: 0x232E9A8 Offset: 0x232D9A8 VA: 0x232E9A8
    public void FEBFDDCGGFFEEFD(PlayerController GBCCAEGGHEDFHDB) { }

    // RVA: 0x232EDE0 Offset: 0x232DDE0 VA: 0x232EDE0
    public Material CHABDECGDGBGGBH(CharacterSkinnedMeshLodGroupBase GEGFCEFGHHBGGDG, Material FACHHAEBEHHHDCD) { }

    // RVA: 0x232EF50 Offset: 0x232DF50 VA: 0x232EF50
    internal void AABBFBBBGGDFBBC(PlayerController GBCCAEGGHEDFHDB, int DGHFHDBHHADHFBD) { }

    // RVA: 0x232F1E4 Offset: 0x232E1E4 VA: 0x232F1E4
    public List<string> DDCEGHFAGDECABA() { }

    // RVA: 0x232F4A0 Offset: 0x232E4A0 VA: 0x232F4A0
    public void BHCCGFAABAFDBCH(Team FABHHAEEBHAABBD, string DCDCCBEHFHDGHAF, Vector3 CCEGFABBDCGBDFH, Quaternion AAABFFECGDGHAEF, int BHBBHDDGCACGEAF = 100, int BCFDACFADHEEHHB = 100, bool EAHCACGEAFCBDBE = True, bool DCDDCGFGEFHHAEA = False, float GCCGHBBGBBDDAGD = 3,4028235E+38) { }

    // RVA: 0x232F758 Offset: 0x232E758 VA: 0x232F758
    public void HFDAEBEFHDCFHAD(AFFHFDECAHFDCFD AECGGCAFFCCGEBC) { }

    // RVA: 0x232F7B0 Offset: 0x232E7B0 VA: 0x232F7B0
    private void FDHHAEACBECBBGD() { }

    // RVA: 0x232F920 Offset: 0x232E920 VA: 0x232F920
    public HashSet<PlayerController> CEFCEABBFCGBGFG() { }

    // RVA: 0x232F928 Offset: 0x232E928 VA: 0x232F928
    public void BFDAEEHDGBDCHFG(Team FABHHAEEBHAABBD, PlayerArms ABDEGEDHBGFADAB, PlayerCharacters AACHDECGFABBBAB, int AEFFEACGBGCFADA, Type[] DACCAHBGDGEHEAF, string CHBHCAGABGCGCEE, string ABDFDAGGHGABHHC, string DCDCCBEHFHDGHAF) { }

    // RVA: 0x232FB64 Offset: 0x232EB64 VA: 0x232FB64
    public PlayerController DAGBFHDCBFBBEHG(GameObject FAHCBHDGABFADHD) { }

    // RVA: 0x232FD2C Offset: 0x232ED2C VA: 0x232FD2C
    private bool GDCDFDEGGEEGAHF() { }

    // RVA: 0x232FDF8 Offset: 0x232EDF8 VA: 0x232FDF8
    public bool FGEEEGAFEGHBDAH(int DDCHHGGEDAAFABA) { }

    // RVA: 0x232FE50 Offset: 0x232EE50 VA: 0x232FE50
    public void .ctor() { }

    [CompilerGenerated]
    // RVA: 0x2330080 Offset: 0x232F080 VA: 0x2330080
    public void CHBHBDFHHGECAHC(Action<PlayerController, EDHFCGGAGFEDCAF> ACHHCFBEEFHCBEA) { }

    // RVA: 0x2330130 Offset: 0x232F130 VA: 0x2330130
    public string FGHACDEGCDDHFHA(Team FABHHAEEBHAABBD) { }

    // RVA: 0x233029C Offset: 0x232F29C VA: 0x233029C
    public void AEBDFCEBBECGHFD(PlayerController FGFABHEFBFCBDFD, EDHFCGGAGFEDCAF ABFHABCCDGHHGFA) { }

    // RVA: 0x2330420 Offset: 0x232F420 VA: 0x2330420
    internal void FHGAGHBGABFBCGH(PlayerController FGFABHEFBFCBDFD) { }

    [CompilerGenerated]
    // RVA: 0x2330A14 Offset: 0x232FA14 VA: 0x2330A14
    internal PlayerController CDGAECHDHHGFFHB() { }

    // RVA: 0x2330A1C Offset: 0x232FA1C VA: 0x2330A1C Slot: 5
    protected override void EHDAHAGEBDCDHAA() { }

    // RVA: 0x2330C1C Offset: 0x232FC1C VA: 0x2330C1C
    public void DBFABDDDAAAGFHB(Team FABHHAEEBHAABBD, Vector3 CCEGFABBDCGBDFH, Quaternion AAABFFECGDGHAEF, int BHBBHDDGCACGEAF = 100, int BCFDACFADHEEHHB = 100, bool EAHCACGEAFCBDBE = True, bool DCDDCGFGEFHHAEA = False, float GCCGHBBGBBDDAGD = 3,4028235E+38) { }

    [CompilerGenerated]
    // RVA: 0x2330E28 Offset: 0x232FE28 VA: 0x2330E28
    public void DEFECDEEBCGHBHG(Action<PlayerController, EDHFCGGAGFEDCAF> ACHHCFBEEFHCBEA) { }

    // RVA: 0x2330ED8 Offset: 0x232FED8 VA: 0x2330ED8
    private void DDDGHEBECCGDDDF() { }

    // RVA: 0x2331034 Offset: 0x2330034 VA: 0x2331034
    public Material HECGHGHBHEFBCDH(CharacterLodGroup GEGFCEFGHHBGGDG, Material FACHHAEBEHHHDCD) { }

    [CompilerGenerated]
    // RVA: 0x23311EC Offset: 0x23301EC VA: 0x23311EC
    private void BDFHBGAGCCHECHD(PlayerController ACHHCFBEEFHCBEA) { }

    [CanBeNull]
    // RVA: 0x23311F4 Offset: 0x23301F4 VA: 0x23311F4
    public PlayerController AACCDDCHDDEHCAB(int DDCHHGGEDAAFABA) { }

    // RVA: 0x232E8C8 Offset: 0x232D8C8 VA: 0x232E8C8
    private FDGBHADBCHECHEC EEDDAGCEBBADDHD(string DCDCCBEHFHDGHAF) { }

    // RVA: 0x23312A0 Offset: 0x23302A0 VA: 0x23312A0
    public void AFFFFEAFCBEAFAG(Type DCEGEDAHAGHAHAE) { }

    [CompilerGenerated]
    // RVA: 0x23313C0 Offset: 0x23303C0 VA: 0x23313C0
    public void HHDEAHGBCDFHAEE(PlayerManager.FBEBAEADDGAGBEH ACHHCFBEEFHCBEA) { }

    [CompilerGenerated]
    // RVA: 0x233145C Offset: 0x233045C VA: 0x233145C
    public void FCHCDGCFFAAEFBF(PlayerManager.FBEBAEADDGAGBEH ACHHCFBEEFHCBEA) { }

    // RVA: 0x23314F8 Offset: 0x23304F8 VA: 0x23314F8
    public GameObject CCCABCFGBDADBBH(string DGHFHDBHHADHFBD, Vector3 CCEGFABBDCGBDFH, Quaternion AAABFFECGDGHAEF) { }

    // RVA: 0x23301B4 Offset: 0x232F1B4 VA: 0x23301B4
    private FDGBHADBCHECHEC EEDDAGCEBBADDHD(Team FABHHAEEBHAABBD) { }

    // RVA: 0x2331674 Offset: 0x2330674 VA: 0x2331674
    public void CFBFCCEACHEDCDC(PlayerController GBCCAEGGHEDFHDB) { }

    // RVA: 0x2331E94 Offset: 0x2330E94 VA: 0x2331E94
    public void ADFCBECBADHFCGB(string EEBHBBFFHBFGFDE) { }

    [CompilerGenerated]
    // RVA: 0x2331FFC Offset: 0x2330FFC VA: 0x2331FFC
    public PlayerController FBFFHBBGFAFBBCH() { }

    // RVA: 0x2332004 Offset: 0x2331004 VA: 0x2332004
    public void GHFACDBEAAAFFBD(AFFHFDECAHFDCFD AECGGCAFFCCGEBC) { }

    [CompilerGenerated]
    // RVA: 0x233205C Offset: 0x233105C VA: 0x233205C
    public void CEDCCCEHBDDCHCD(PlayerManager.FBEBAEADDGAGBEH ACHHCFBEEFHCBEA) { }

    [CompilerGenerated]
    // RVA: 0x23320F8 Offset: 0x23310F8 VA: 0x23320F8
    public void DDHAAHDABEDGBHH(PlayerManager.FBEBAEADDGAGBEH ACHHCFBEEFHCBEA) { }

    // RVA: 0x2332194 Offset: 0x2331194 VA: 0x2332194
    public void OnPhotonInstantiate(PlayerController GBCCAEGGHEDFHDB) { }

    // RVA: 0x2331BA4 Offset: 0x2330BA4 VA: 0x2331BA4
    private void CFBFCCEACHEDCDC() { }

    [CompilerGenerated]
    // RVA: 0x2332334 Offset: 0x2331334 VA: 0x2332334
    private void DDAACAHBBHBHDCB(PlayerController ACHHCFBEEFHCBEA) { }

    // RVA: 0x232EC48 Offset: 0x232DC48 VA: 0x232EC48
    private void BCBCBBFAABACBHG(Action BGEECBHEGCDCHEA) { }

    // RVA: 0x232E82C Offset: 0x232D82C VA: 0x232E82C
    private static ILogger BGGADGEACFFHCEG() { }
}

I'm trying to do this only through pointers and the il2cpp API, and this is the code I have so far, but it causes the application to crash when calling the static method, and when outputting the arguments of the generic class, it shows that there are no arguments.
Code:
void Test(){
    void* (*get_appDomain)() = (void* (*)())(il2cpp_base + string2Offset("0x3cefbcc"));
    monoString*(*TypeName)(void*type) = (monoString*(*)(void*))(il2cpp_base + string2Offset("0x3ceca10"));
    monoArray2<void*>* (*Get_asses)(void* domain) = (monoArray2<void*>* (*)(void*))(il2cpp_base + string2Offset("0x3cefbd8"));
    void* (*get_assNameObject)(void* assembly) = (void* (*)(void*))(il2cpp_base + string2Offset("0x3be9370"));
    monoString* (*get_assName)(void* assembly_name_object) = (monoString* (*)(void*))(il2cpp_base + string2Offset("0x3bea070"));
    void*(*GetTypeFromName)(void*assembly, Il2CppString*name, bool throwError, bool ignore_case) = (void*(*)(void*, Il2CppString*, bool, bool))(il2cpp_base + string2Offset("0x3bec46c"));
    void*(*MakeGenericType)(void*type, void*generic_type) = (void*(*)(void*, void*))(il2cpp_base + string2Offset("0x3ce8e04"));
    void*(*CreateInstance_Array)(void* type, int len) = (void*(*)(void*, int))(il2cpp_base + string2Offset("0x3cd0cec"));
    void*(*GetType_Object)(void*object) = (void*(*)(void*))(il2cpp_base + string2Offset("0x3cede78"));
    void*(*Load_Assembly)(Il2CppString*name) = (void*(*)(Il2CppString*))(il2cpp_base + string2Offset("0x3be94ac"));
    void(*SetValue_Array)(void*array, void*Object, int index) = (void(*)(void*,void*,int))(il2cpp_base + string2Offset("0x3ccd68c"));
    long(*get_LongLength_Array)(void*array) = (long(*)(void*))(il2cpp_base + string2Offset("0x3cced6c"));
    void*(*GetValue_Array)(void*array,long index) = (void*(*)(void*,long))(il2cpp_base + string2Offset("0x3ccede8"));
    void*(*GetBase_Type)(void*type) = (void*(*)(void*))(il2cpp_base + string2Offset("0x3ce7d78"));
    monoArray2<void*>*(*GetMethods)(void* type, int flag) = (monoArray2<void*>*(*)(void*,int))(il2cpp_base + string2Offset("0x3ce65fc"));
    monoString*(*MethodName)(void*method) = (monoString*(*)(void*))(il2cpp_base + string2Offset("0x3beeca8"));
    void*(*GetRuntimeHandle)(void*method) = (void*(*)(void*))(il2cpp_base + string2Offset("0x3bef394"));
    void*(*RuntimeHandle_GetValue)(void*runHandle) = (void*(*)(void*))(il2cpp_base + string2Offset("0x3cfbdf0"));
    
    Il2CppClass* playerManager = get_class("Game.Player", "PlayerManager", assembly_main);
    Il2CppClass* sigleton = get_class("Game.Core", "LazySingleton`1", assembly_main);
    void* domik = get_appDomain();
    if (domik) {
        LOGI("domain is getting");
    }
    LOGI("try get assemblies");
    monoArray2<void*>* assemblies = Get_asses(domik);
    if (assemblies) {
        LOGI("assemblies is getting");
    }
    void** ass_pointer = assemblies->getPointer();
    for (int p = 0; p < assemblies->getCapacity(); ++p) {
        void* assembled = ass_pointer[p];
        if (assembled) {
            const char* ass_name = get_assName(get_assNameObject(assembled))->getChars();
            if (strcmp(ass_name, "Assembly-CSharp.dll") == 0 || strcmp(ass_name, "Assembly-CSharp") == 0) {
                void* corlib = Load_Assembly(il2cpp_string_new("mscorlib"));
                LOGI("Getting type...");
                void* PlayerManager = GetTypeFromName(assembled, il2cpp_string_new("Game.Player.PlayerManager"), false, true);
                void* Lazy = GetTypeFromName(assembled, il2cpp_string_new("Game.Core.LazySingleton`1"), false, true);
                void* SystemType = GetTypeFromName(corlib, il2cpp_string_new("System.Type"), false, true);
                Il2CppClass* SystemType_klass = il2cpp_class_from_name(il2cpp_get_corlib(), "System", "Type");
                Il2CppClass* PlayerManager_klass = get_class("Game.Player", "PlayerManager", assembly_main);
                Il2CppClass* Lazy_klass = get_class("Game.Core", "LazySingleton`1", assembly_main);
                Il2CppClass* Int64Type = il2cpp_class_from_name(il2cpp_get_corlib(), "System", "Int64");
                if(PlayerManager){
                    LOGI("PlayerManager is get");
                    LOGI("Name [%s]", TypeName(PlayerManager)->getChars());
                }
                if(Lazy){
                    LOGI("Lazy is get");
                    LOGI("Name [%s]", TypeName(Lazy)->getChars());
                }
                if(SystemType){
                    LOGI("SystemType is get");
                    LOGI("Name [%s]", TypeName(SystemType)->getChars());
                }
                if(Int64Type){
                    LOGI("Int64Type is get");
                    LOGI("Name [%s]", Int64Type->name);
                }
                if(PlayerManager_klass){
                    LOGI("PlayerManager_klass is get");
                    LOGI("Name [%s], size [%i]", PlayerManager_klass->name, (int)PlayerManager_klass->instance_size);
                }
                if(SystemType_klass){
                    LOGI("SystemType_klass is get");
                    LOGI("Name [%s]", SystemType_klass->name);
                }
                LOGI("Try get base type...");
                void* base = GetBase_Type(PlayerManager);
                LOGI("BAse getting");
                void* TypeArray = CreateInstance_Array(SystemType, 1);
                LOGI("Type array creating");
                SetValue_Array(TypeArray, PlayerManager, 0);
                LOGI("Value setted");
                void* generic_type = MakeGenericType(Lazy, TypeArray);
                LOGI("Generic type is created");
                if(generic_type){
                    LOGI("generic_type is creating good");
                    LOGI("Type name [%s], generic arg [%s]", TypeName(generic_type)->getChars(), GenericType((Il2CppClass*)generic_type).c_str());
                }
            }
        }
    }
}
 

About us

  • Welcome to platinmods.com! We are proud to present you the place which let's dreams come true! Focusing on quality and trust we have spend much time to build a gaming community fitting to your wishes and needs. Actually we offer you the finest MODs and Games of the Android section and we slowly expand to the iOS section as well. But games, Android MODs & iOS MODs are not the only things we can offer you. We have tutorials, tools, a very friendly, active and solid community which will help you with any problem you have =) Your happiness is our goal. We hope you enjoy!

Forum statistics

Threads
64,093
Messages
2,663,966
Members
4,324,810
Latest member
clashops