public bool ResolvePointerPath(HookProcess process) { IntPtr nextAddress = baseAddress; bool asmStart = false; foreach (var offset in PointerPath) { try { baseAddress = new IntPtr(nextAddress.ToInt64() + offset); if (baseAddress == IntPtr.Zero) { return(false); } if (!asmStart) { nextAddress = baseAddress + process.GetInt32(new IntPtr(baseAddress.ToInt64())) + 4; asmStart = true; } else { nextAddress = process.ReadPointer(baseAddress); } } catch { return(false); } } return(true); }
public override object GetData(HookProcess process) { IntPtr pointer = (IntPtr)process.GetInt64(baseAddress); string chattext = string.Empty; if (pointer != IntPtr.Zero) { int len = process.GetInt32(pointer, Offsets["OffsetInputLength"]); if (len <= 501) // ??? { IntPtr pointer2 = (IntPtr)process.GetInt64(pointer, Offsets["OffsetInputText"]); if (pointer2 != IntPtr.Zero) { chattext = process.GetString(pointer2, 0, len); } } } SigChatInputData data = new SigChatInputData { open = (pointer != IntPtr.Zero), text = chattext, }; return((object)data); }