Exemplo n.º 1
0
        public ulong ReadMemory(ulong address, byte[] memory, ulong size, out SbError error)
        {
            ReadMemoryResponse response = null;

            if (connection.InvokeRpc(() =>
            {
                response = client.ReadMemory(
                    new ReadMemoryRequest
                {
                    Process = grpcSbProcess,
                    Address = address,
                    Size = size
                });
            }))
            {
                error = errorFactory.Create(response.Error);
                var responseArray = response.Memory.ToByteArray();
                int startingIndex = 0;
                if (responseArray.Length > memory.Length)
                {
                    Trace.WriteLine("Error: buffer is not large enough for the output.");
                    startingIndex = responseArray.Length - memory.Length;
                }
                response.Memory.ToByteArray().CopyTo(memory, startingIndex);
                return(response.Size);
            }
            var grpcError = new GrpcSbError
            {
                Success = false,
                Error   = "Rpc error while calling ReadMemory."
            };

            error = errorFactory.Create(grpcError);
            return(0);
        }
        public override Task <ReadMemoryResponse> ReadMemory(
            ReadMemoryRequest request, ServerCallContext context)
        {
            var     sbProcess = GrpcLookupUtils.GetProcess(request.Process, processStore);
            var     buffer    = new byte[request.Size];
            SbError error;
            var     sizeRead = sbProcess.ReadMemory(
                request.Address, buffer, request.Size, out error);

            var response = new ReadMemoryResponse
            {
                Error = new GrpcSbError
                {
                    Success = error.Success(),
                    Error   = error.GetCString(),
                },
                Memory = ByteString.CopyFrom(buffer),
                Size   = sizeRead
            };

            return(Task.FromResult(response));
        }