diff --git a/FrostbitePluginExt.cs b/FrostbitePluginExt.cs index 4e487c1..0b2885a 100644 --- a/FrostbitePluginExt.cs +++ b/FrostbitePluginExt.cs @@ -67,6 +67,44 @@ public override void Terminate() class FrostBiteNodeInfoReader : INodeInfoReader { public string ReadNodeInfo(BaseNode node, IntPtr value, MemoryBuffer memory) + { + // 1. try the direct value + var info = ReadPtrInfo(value, memory); + if (!string.IsNullOrEmpty(info)) + { + return info; + } + + // 2. try indirect pointer + var indirectPtr = memory.Process.ReadRemoteObject(value); + if (indirectPtr.MayBeValid()) + { + info = ReadPtrInfo(indirectPtr, memory); + if (!string.IsNullOrEmpty(info)) + { + return $"Ptr -> {info}"; + } + + // 3. try weak pointer + var weakTempPtr = indirectPtr - IntPtr.Size; + if (weakTempPtr.MayBeValid()) + { + var weakPtr = memory.Process.ReadRemoteObject(weakTempPtr); + if (weakPtr.MayBeValid()) + { + info = ReadPtrInfo(weakPtr, memory); + if (!string.IsNullOrEmpty(info)) + { + return $"WeakPtr -> {info}"; + } + } + } + } + + return null; + } + + private string ReadPtrInfo(IntPtr value, MemoryBuffer memory) { var getTypeFnPtr = memory.Process.ReadRemoteObject(value); if (getTypeFnPtr.MayBeValid()) @@ -85,7 +123,11 @@ public string ReadNodeInfo(BaseNode node, IntPtr value, MemoryBuffer memory) var namePtr = memory.Process.ReadRemoteObject(typeInfoDataPtr); if (namePtr.MayBeValid()) { - return memory.Process.ReadRemoteString(Encoding.UTF8, namePtr, 64); + var info = memory.Process.ReadRemoteUTF8StringUntilFirstNullCharacter(namePtr, 64); + if (info.Length > 0 && info[0].IsPrintable()) + { + return info; + } } } } diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 7432a8e..173b917 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("1.0.1.0")] +[assembly: AssemblyFileVersion("1.0.1.0")]