示例#1
0
        public string ReadNodeInfo(BaseHexCommentNode node, IRemoteMemoryReader reader, MemoryBuffer memory, IntPtr nodeAddress, IntPtr nodeValue)
        {
            // 1. try the direct value
            var info = ReadPtrInfo(nodeValue, reader);

            if (!string.IsNullOrEmpty(info))
            {
                return(info);
            }

            // 2. try indirect pointer
            var indirectPtr = reader.ReadRemoteIntPtr(nodeValue);

            if (indirectPtr.MayBeValid())
            {
                info = ReadPtrInfo(indirectPtr, reader);
                if (!string.IsNullOrEmpty(info))
                {
                    return($"Ptr -> {info}");
                }

                // 3. try weak pointer
                var weakTempPtr = indirectPtr - IntPtr.Size;
                if (weakTempPtr.MayBeValid())
                {
                    var weakPtr = reader.ReadRemoteIntPtr(weakTempPtr);
                    if (weakPtr.MayBeValid())
                    {
                        info = ReadPtrInfo(weakPtr, reader);
                        if (!string.IsNullOrEmpty(info))
                        {
                            return($"WeakPtr -> {info}");
                        }
                    }
                }
            }

            return(null);
        }
示例#2
0
        /// <summary>
        /// Used to print custom informations about a node.
        /// </summary>
        /// <param name="node">The node.</param>
        /// <param name="reader">The current <see cref="T:ReClassNET.Memory.IRemoteMemoryReader" />.</param>
        /// <param name="memory">The current <see cref="T:ReClassNET.Memory.MemoryBuffer" />.</param>
        /// <param name="nodeAddress">The absolute address of the node.</param>
        /// <param name="nodeValue">The memory value of the node as <see cref="T:System.IntPtr" />.</param>
        public string ReadNodeInfo(BaseHexCommentNode node, IRemoteMemoryReader reader, MemoryBuffer memory, IntPtr nodeAddress, IntPtr nodeValue)
        {
            if (nodeValue.IsNull() || _base.NameDump.Count is 0)
            {
                return(null);
            }

            dynamic uobject = null;

            switch (_base.Game)
            {
            case UE3PluginExt.GameType.KillingFloor2:
            {
                uobject = reader.ReadRemoteObject <KillingFloor2.UObject>(nodeValue);
                break;
            }

            case UE3PluginExt.GameType.RocketLeague:
            {
                uobject = reader.ReadRemoteObject <RocketLeague.UObject>(nodeValue);
                break;
            }
            }

            if (uobject.Name.Index < 0 || uobject.Name.Index >= _base.NameDump.Count)
            {
                return(null);
            }

            if (_base.NameDump.TryGetValue(uobject.Name.Index, out string name))
            {
                return(name);
            }

            return(null);
        }
 /// <summary>This method lets ReClass.NET print the name and the value of the node.</summary>
 public string ReadNodeInfo(BaseHexCommentNode node, IRemoteMemoryReader reader, MemoryBuffer memory, IntPtr nodeAddress, IntPtr nodeValue)
 {
     return($"{node.Name}@{nodeAddress.ToString("X")} => {nodeValue.ToString("X")}");
 }