예제 #1
0
        private static string ReadPtrInfo(IntPtr value, IRemoteMemoryReader process)
        {
            var getTypeFnPtr = process.ReadRemoteIntPtr(value);

            if (getTypeFnPtr.MayBeValid())
            {
#if RECLASSNET64
                var offset      = process.ReadRemoteInt32(getTypeFnPtr + 3);
                var typeInfoPtr = getTypeFnPtr + offset + 7;
#else
                var typeInfoPtr = process.ReadRemoteIntPtr(getTypeFnPtr + 1);
#endif
                if (typeInfoPtr.MayBeValid())
                {
                    var typeInfoDataPtr = process.ReadRemoteIntPtr(typeInfoPtr);
                    if (typeInfoDataPtr.MayBeValid())
                    {
                        var namePtr = process.ReadRemoteIntPtr(typeInfoDataPtr);
                        if (namePtr.MayBeValid())
                        {
                            var info = process.ReadRemoteStringUntilFirstNullCharacter(namePtr, Encoding.UTF8, 64);
                            if (info.Length > 0 && info[0].IsPrintable())
                            {
                                return(info);
                            }
                        }
                    }
                }
            }

            return(null);
        }
예제 #2
0
        public static IntPtr ReadRemoteIntPtr(this IRemoteMemoryReader reader, IntPtr address)
        {
#if RECLASSNET64
            return((IntPtr)reader.ReadRemoteInt64(address));
#else
            return((IntPtr)reader.ReadRemoteInt32(address));
#endif
        }