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)); }