private DisposableNamedOnnxValue(string name, Object value, OnnxValueType onnxValueType, TensorElementType elementType, NativeMemoryHandler nativeMemoryManager)
     : base(name, value)
 {
     _onnxValueType       = onnxValueType;
     _elementType         = elementType;
     _nativeMemoryManager = nativeMemoryManager;
 }
Esempio n. 2
0
        /// <summary>
        /// Reads bytes at the specified address and returns it.
        /// </summary>
        /// <param name="Address">The address.</param>
        /// <param name="Size">The size.</param>
        public byte[] Read(ulong Address, uint Size)
        {
            if (this.IsDisposed)
            {
                throw new ObjectDisposedException(nameof(BekoEngine), "The memory handler is disposed");
            }

            if (Address >= 0x7FFFFFFFFFFF)
            {
                throw new ArgumentException("Address is outside userspace virtual memory range");
            }

            if (Address + Size > 0x7FFFFFFFFFFF)
            {
                throw new ArgumentException("Address plus size is outside userspace virtual memory range");
            }

            var Buffer = new byte[Size];
            var Read   = 0u;

            if (!NativeMemoryHandler.ReadProcessMemory(this.Handle, Address, Buffer, Size, ref Read))
            {
                throw new Exception("Failed to read memory from remote process");
            }

            return(Buffer);
        }
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         // dispose managed state (managed objects).
         if (_nativeMemoryManager != null)
         {
             _nativeMemoryManager.Dispose();
             _nativeMemoryManager = null;
         }
     }
 }
Esempio n. 4
0
        /// <summary>
        /// Reads bytes at the specified address and returns a structure from it.
        /// </summary>
        /// <param name="Address">The address.</param>
        public T Read <T>(ulong Address)
        {
            if (this.IsDisposed)
            {
                throw new ObjectDisposedException(nameof(BekoEngine), "The memory handler is disposed");
            }

            if (Address >= 0x7FFFFFFFFFFF)
            {
                throw new ArgumentException("Address is outside userspace virtual memory range");
            }

            var Size = Marshal.SizeOf <T>();

            if (Address + (ulong)Size > 0x7FFFFFFFFFFF)
            {
                throw new ArgumentException("Address plus size is outside userspace virtual memory range");
            }

            var Buffer = default(T);

            var Allocation = Marshal.AllocHGlobal(Size);
            var Read       = 0u;

            if (Allocation == IntPtr.Zero)
            {
                throw new InsufficientMemoryException("Couldn't allocate memory for the buffer");
            }

            var Success = NativeMemoryHandler.ReadProcessMemory(this.Handle, Address, Buffer, (uint)Size, ref Read);

            if (Success)
            {
                Buffer = Marshal.PtrToStructure <T>(Allocation);
            }

            Marshal.FreeHGlobal(Allocation);

            if (!Success)
            {
                throw new Exception("Failed to read memory from remote process");
            }

            return(Buffer);
        }
        private bool disposedValue = false; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // dispose managed state (managed objects).
                    if (_nativeMemoryManager != null)
                    {
                        _nativeMemoryManager.Dispose();
                        _nativeMemoryManager = null;
                    }
                }

                // free unmanaged resources (unmanaged objects) and override a finalizer below.
                // set large fields to null.
                disposedValue = true;
            }
        }
Esempio n. 6
0
 private DisposableNamedOnnxValue(string name, Object value, NativeMemoryHandler nativeMemoryManager)
     : base(name, value)
 {
     _nativeMemoryManager = nativeMemoryManager;
 }