public static void Initialize() { #region SetupPTFXAssetStore var pattern = new Pattern("\x0F\xBF\x04\x9F\xB9", "xxxxx"); var result = pattern.Get(0x19); if (result != IntPtr.Zero) { var rip = result.ToInt64() + 7; var value = Marshal.ReadInt32(IntPtr.Add(result, 3)); PtfxAssetStorePtr = new IntPtr(rip + value); } #endregion #region SetupfwGetAssetIndex pattern = new Pattern("\x41\x8B\xDE\x4C\x63\x00", "xxxxx?"); result = pattern.Get(); if (result != IntPtr.Zero) { var rip = result.ToInt64(); var value = Marshal.ReadInt32(result - 4); FwGetAssetIndex = Marshal.GetDelegateForFunctionPointer <FwGetAssetIndexFn>(new IntPtr(rip + value)); } #endregion }
public static void Init() { #region SetupPTFXAssetStore var pattern = new Pattern("\x0F\xBF\x04\x9F\xB9", "xxxxx"); var result = pattern.Get(0x19); if (result != IntPtr.Zero) { var rip = result.ToInt64() + 7; var value = Marshal.ReadInt32(IntPtr.Add(result, 3)); PtfxAssetStorePtr = new IntPtr(rip + value); } #endregion #region SetupfwGetAssetIndex pattern = new Pattern("\x41\x8B\xDE\x4C\x63\x00", "xxxxx?"); result = pattern.Get(); if (result != IntPtr.Zero) { var rip = result.ToInt64(); var value = Marshal.ReadInt32(result - 4); FwGetAssetIndex = Marshal.GetDelegateForFunctionPointer <FwGetAssetIndexFn>(new IntPtr(rip + value)); } #endregion #region SetupPTFXAddressFunc pattern = new Pattern("\x74\x21\x48\x8B\x48\x20\x48\x85\xC9\x74\x18\x48\x8B\xD6\xE8", "xxxxxxxxxxxxxxx"); result = pattern.Get(); if (result != IntPtr.Zero) { byte *address; address = (byte *)result - 10; PtfxAddressFunc = Marshal.GetDelegateForFunctionPointer <PtfxAddressFuncDelegate>(new IntPtr(*(int *)(address) + address + 4)); } #endregion bInitialized = true; }
static MemoryAccess() { #region SetupPTFXAssetStore var pattern = new Pattern("\x48\x8D\x0D\x00\x00\x00\x00\xFF\x50\x10\x8B\x45\x38", "xxx????xxxxxx"); IntPtr result = pattern.Get(); if (result != null) { long rip = result.ToInt64() + 7; int value = Marshal.ReadInt32(IntPtr.Add(result, 3)); _ptfxAssetStorePtr = new IntPtr(rip + value); } #endregion #region SetupfwGetAssetIndex pattern = new Pattern("\x48\x8D\x54\x24\x00\x8B\xCF\x0D\x00\x00\x00\x00", "xxxx?xxx????"); result = pattern.Get(0x4F); if (result != null) { long rip = result.ToInt64() + 4; int value = Marshal.ReadInt32(result); _fwGetAssetIndex = Marshal.GetDelegateForFunctionPointer <FwGetAssetIndexFn>(new IntPtr(rip + value)); } #endregion /* #region SetupGetPooledPtfxAddress * * pattern = new Pattern("\x48\x8B\x40\x20\x0F\x28\x0B", "xxxxxxx"); * * result = pattern.Get(-0xA); * * if (result != null) * { * long rip = result.ToInt64() + 5; * int value = Marshal.ReadInt32(result + 0x1); * _getPooledPtfxAddress = Marshal.GetDelegateForFunctionPointer<getPooledPtfxAddressFn>(new IntPtr(rip + value)); * } * #endregion*/ }
/* * struct fwPool * { * void *m_pData; * unsigned __int8 *m_bitMap; * int m_count; * int m_itemSize; * int unkItemIndex; * int nextFreeSlotIndex; * unsigned int m_flags; * char pad1[4]; * }; */ public static void Initialize() { #region SetupPTFXAssetStore var pattern = new Pattern("\x0F\xBF\x04\x9F\xB9", "xxxxx"); var result = pattern.Get(0x19); if (result != IntPtr.Zero) { var rip = result.ToInt64() + 7; var value = Marshal.ReadInt32(IntPtr.Add(result, 3)); PtfxAssetStorePtr = new IntPtr(rip + value); } #endregion #region SetupfwGetAssetIndex pattern = new Pattern("\x41\x8B\xDE\x4C\x63\x00", "xxxxx?"); result = pattern.Get(); if (result != IntPtr.Zero) { var rip = result.ToInt64(); var value = Marshal.ReadInt32(result - 4); FwGetAssetIndex = Marshal.GetDelegateForFunctionPointer <FwGetAssetIndexFn>(new IntPtr(rip + value)); } // Entity Pool -> pattern = new Pattern("\x4C\x8B\x0D\x00\x00\x00\x00\x44\x8B\xC1\x49\x8B\x41\x08", "xxx????xxxxxxx"); result = pattern.Get(7); if (result != IntPtr.Zero) { var rip = result.ToInt64(); var value = Marshal.ReadInt32(result - 4); ScriptEntityPoolAddr = Marshal.ReadIntPtr(new IntPtr(rip + value)); // UI.ShowSubtitle(ScriptEntityPoolAddr.ToString("X")); } // Vehicle Pool -> pattern = new Pattern("\x48\x8B\x05\x00\x00\x00\x00\xF3\x0F\x59\xF6\x48\x8B\x08", "xxx????xxxxxxx"); result = pattern.Get(7); if (result != IntPtr.Zero) { var rip = result.ToInt64(); var value = Marshal.ReadInt32(result - 4); VehiclePoolAddr = Marshal.ReadIntPtr(new IntPtr(rip + value)); // UI.ShowSubtitle(VehiclePoolAddr.ToString("X")); } // Ped Pool -> pattern = new Pattern("\x48\x8B\x05\x00\x00\x00\x00\x41\x0F\xBF\xC8\x0F\xBF\x40\x10", "xxx????xxxxxxxx"); result = pattern.Get(7); if (result != IntPtr.Zero) { var rip = result.ToInt64(); var value = Marshal.ReadInt32(result - 4); PedPoolAddr = Marshal.ReadIntPtr(new IntPtr(rip + value)); // UI.ShowSubtitle(PedPoolAddr.ToString("X")); } // Object Pool -> pattern = new Pattern("\x48\x8B\x05\x00\x00\x00\x00\x8B\x78\x10\x85\xFF", "xxx????xxxxx"); result = pattern.Get(7); if (result != IntPtr.Zero) { var rip = result.ToInt64(); var value = Marshal.ReadInt32(result - 4); ObjectPoolAddr = Marshal.ReadIntPtr(new IntPtr(rip + value)); // UI.ShowSubtitle(ObjectPoolAddr.ToString("X")); } pattern = new Pattern("\x48\xF7\xF9\x49\x8B\x48\x08\x48\x63\xD0\xC1\xE0\x08\x0F\xB6\x1C\x11\x03\xD8", "xxxxxxxxxxxxxxxxxxx"); result = pattern.Get(); if (result != IntPtr.Zero) { AddEntityToPool = Marshal.GetDelegateForFunctionPointer <AddEntityToPoolFn>(IntPtr.Subtract(result, 0x68)); //UI.ShowSubtitle(result.ToString("X")); } // WinHelper.CopyTlsValues(WinHelper.GetProcessMainThreadId(), Win32Native.GetCurrentThreadId(), 0xC8, 0xC0, 0xB8); #endregion bInitialized = true; }