the main logic is
var someClass = new SomeClass(); //or other c# initialisation
someClass.SomeMethod();
SomeMethod() cant be called from no where Example #1
public class SomeClass : MonoBehaviour
{
// Fields
...
// Properties
...
// Methods
...
// RVA: 0x100400 Offset: 0x100400 VA: 0x100400
public static SomeClass get_Instance() { }
// RVA: 0x100500 Offset: 0x100500 VA: 0x100500
public void SomeMethod() // address 0x100500
// RVA: 0x100600 Offset: 0x100600 VA: 0x100600
public static void SomeStaticMethod() // address 0x100600
...
}
void* (*SomeClass$$get_Instance)() = (void(*)())getRealOffset(0x100400);
void (*SomeClass$$SomeMethod)(void *SomeClass) = (void(*)(void *))getRealOffset(0x100500);
void* SomeClassInstance = SomeClass$$get_Instance();
SomeClass$$SomeMethod(SomeClassInstance);
void (*SomeClass$$SomeStaticMethod)() = (void(*)())getRealOffset(0x100600);
SomeClass$$SomeStaticMethod();
Example #2
public class SomeOtherClass : MonoBehaviour
{
// Fields
...
// Properties
...
// Methods
...
// RVA: 0x100300 Offset: 0x100300 VA: 0x100300
public void InitWithSomeClass(SomeClass someClassInstance) { }
...
}
void* SomeClassInstance = NULL;
void (*SomeOtherClass$$InitWithSomeClass_original)(void *SomeOtherClassInstance, void* someClassInstance);
void _SomeOtherClass$$InitWithSomeClass_hook(void *SomeOtherClassInstance, void* someClassInstance)
{
SomeClassInstance = someClassInstance;
SomeOtherClass$$InitWithSomeClass_original(SomeOtherClassInstance, someClassInstance);
}
HOOK(0x100300, _SomeOtherClass$$InitWithSomeClass_hook, SomeOtherClass$$InitWithSomeClass_original);