Exemplo n.º 1
0
        public bool GetRegisterValue(int index, out ulong value)
        {
            value = 0;

            if (_threadService.GetRegisterInfo(index, out RegisterInfo info))
            {
                try
                {
                    Span <byte> threadContext = new Span <byte>(GetThreadContext(), info.RegisterOffset, info.RegisterSize);
                    switch (info.RegisterSize)
                    {
                    case 1:
                        value = MemoryMarshal.Read <byte>(threadContext);
                        return(true);

                    case 2:
                        value = MemoryMarshal.Read <ushort>(threadContext);
                        return(true);

                    case 4:
                        value = MemoryMarshal.Read <uint>(threadContext);
                        return(true);

                    case 8:
                        value = MemoryMarshal.Read <ulong>(threadContext);
                        return(true);
                    }
                }
                catch (DiagnosticsException)
                {
                }
            }
            return(false);
        }
Exemplo n.º 2
0
        public bool GetRegisterValue(int index, out ulong value)
        {
            value = 0;

            if (_threadService.GetRegisterInfo(index, out RegisterInfo info))
            {
                try
                {
                    byte[] threadContext = GetThreadContext();
                    unsafe
                    {
                        fixed(byte *ptr = threadContext)
                        {
                            switch (info.RegisterSize)
                            {
                            case 1:
                                value = *((byte *)(ptr + info.RegisterOffset));
                                return(true);

                            case 2:
                                value = *((ushort *)(ptr + info.RegisterOffset));
                                return(true);

                            case 4:
                                value = *((uint *)(ptr + info.RegisterOffset));
                                return(true);

                            case 8:
                                value = *((ulong *)(ptr + info.RegisterOffset));
                                return(true);
                            }
                        }
                    }
                }
                catch (DiagnosticsException)
                {
                }
            }
            return(false);
        }