Code:
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate IntPtr GetObjectNameDelegate(IntPtr baseAddress);
private static GetObjectNameDelegate GetObjectNameHandler;
public string Name
{
get
{
if (GetObjectNameHandler == null)
{
GetObjectNameHandler = GetVirtualFunction<GetObjectNameDelegate>(Offsets.VirtualFunctions.GetName);
}
IntPtr objNamePtr = GetObjectNameHandler(BaseAddress);
if (objNamePtr != IntPtr.Zero)
{
return Marshal.PtrToStringAnsi(objNamePtr);
}
return string.Empty;
}
}
public T GetVirtualFunction<T>(Offsets.VirtualFunctions function) where T : class
{
return Magic.Instance.RegisterDelegate<T>(Magic.Instance.GetObjectVtableFunction(BaseAddress, (uint)function));
}