public override Task <ReadInstructionInfosResponse> ReadInstructionInfos(
            ReadInstructionInfosRequest request, ServerCallContext context)
        {
            RemoteTarget           target       = GrpcLookupUtils.GetTarget(request.Target, _targetStore);
            SbAddress              address      = _addressStore.GetObject(request.Address.Id);
            var                    response     = new ReadInstructionInfosResponse();
            List <InstructionInfo> instructions =
                target.ReadInstructionInfos(address, request.Count, request.Flavor);

            if (instructions != null)
            {
                foreach (InstructionInfo instruction in instructions)
                {
                    var instructionInfo = new GrpcInstructionInfo {
                        Address    = instruction.Address, Operands = instruction.Operands ?? "",
                        Comment    = instruction.Comment ?? "", Mnemonic = instruction.Mnemonic ?? "",
                        SymbolName = instruction.SymbolName ?? ""
                    };
                    if (instruction.LineEntry != null)
                    {
                        instructionInfo.LineEntry = new GrpcLineEntryInfo {
                            FileName  = instruction.LineEntry.FileName ?? "",
                            Directory = instruction.LineEntry.Directory ?? "",
                            Line      = instruction.LineEntry.Line, Column = instruction.LineEntry.Column
                        };
                    }
                    response.Instructions.Add(instructionInfo);
                }
            }
            return(Task.FromResult(response));
        }
        // Kills the process.
        // Returns true if successful, false otherwise.
        public override Task <KillResponse> Kill(KillRequest request, ServerCallContext context)
        {
            var sbProcess = GrpcLookupUtils.GetProcess(request.Process, processStore);
            var result    = sbProcess.Kill();

            return(Task.FromResult(new KillResponse {
                Result = result
            }));
        }
        // Continues the process.
        // Returns true if successful, false otherwise.
        public override Task <ContinueResponse> Continue(ContinueRequest request,
                                                         ServerCallContext contest)
        {
            var sbProcess = GrpcLookupUtils.GetProcess(request.Process, processStore);
            var result    = sbProcess.Continue();

            return(Task.FromResult(new ContinueResponse {
                Result = result
            }));
        }
        // Get the total number of threads in the thread list.
        public override Task <GetNumThreadsResponse> GetNumThreads(GetNumThreadsRequest request,
                                                                   ServerCallContext context)
        {
            SbProcess sbProcess     = GrpcLookupUtils.GetProcess(request.Process, processStore);
            int       numberThreads = sbProcess.GetNumThreads();

            return(Task.FromResult(new GetNumThreadsResponse {
                NumberThreads = numberThreads
            }));
        }
        public override Task <SetSelectedThreadByIdResponse> SetSelectedThreadById(
            SetSelectedThreadByIdRequest request, ServerCallContext context)
        {
            var sbProcess = GrpcLookupUtils.GetProcess(request.Process, processStore);
            var success   = sbProcess.SetSelectedThreadById(request.ThreadId);

            return(Task.FromResult(new SetSelectedThreadByIdResponse
            {
                Success = success
            }));
        }
        public override Task <GetLoadAddressResponse> GetLoadAddress(GetLoadAddressRequest request,
                                                                     ServerCallContext context)
        {
            var section = sectionStore.GetObject(request.Section.Id);
            var target  = GrpcLookupUtils.GetTarget(request.Target, targetStore);

            return(Task.FromResult(
                       new GetLoadAddressResponse {
                LoadAddress = section.GetLoadAddress(target.GetSbTarget())
            }));
        }
        public override Task <RemoveModuleResponse> RemoveModule(RemoveModuleRequest request,
                                                                 ServerCallContext context)
        {
            RemoteTarget target = GrpcLookupUtils.GetTarget(request.Target, _targetStore);
            SbModule     module = _moduleStore.GetObject(request.Module.Id);

            return(Task.FromResult(
                       new RemoveModuleResponse {
                Result = target.RemoveModule(module)
            }));
        }
        public override Task <GetTargetResponse> GetTarget(GetTargetRequest request,
                                                           ServerCallContext context)
        {
            SbProcess sbProcess    = GrpcLookupUtils.GetProcess(request.Process, processStore);
            var       target       = sbProcess.GetTarget();
            var       grpcSbThread = new GrpcSbTarget
            {
                Id = target.GetId()
            };

            return(Task.FromResult(new GetTargetResponse {
                Target = grpcSbThread
            }));
        }
        public override Task <SetModuleLoadAddressResponse> SetModuleLoadAddress(
            SetModuleLoadAddressRequest request, ServerCallContext context)
        {
            RemoteTarget target    = GrpcLookupUtils.GetTarget(request.Target, _targetStore);
            SbModule     module    = _moduleStore.GetObject(request.Module.Id);
            SbError      error     = target.SetModuleLoadAddress(module, request.SectionsOffset);
            var          grpcError =
                new GrpcSbError {
                Success = error.Success(), Error = error.GetCString()
            };

            return(Task.FromResult(new SetModuleLoadAddressResponse {
                Error = grpcError
            }));
        }
        public override Task <AddModuleResponse> AddModule(AddModuleRequest request,
                                                           ServerCallContext context)
        {
            RemoteTarget target   = GrpcLookupUtils.GetTarget(request.Target, _targetStore);
            var          response = new AddModuleResponse();
            SbModule     module   = target.AddModule(request.Path, request.Triple, request.Uuid);

            if (module != null)
            {
                response.Module = new GrpcSbModule {
                    Id = _moduleStore.AddObject(module)
                };
            }
            return(Task.FromResult(response));
        }
        public override Task <ResolveLoadAddressResponse> ResolveLoadAddress(
            ResolveLoadAddressRequest request, ServerCallContext context)
        {
            RemoteTarget target   = GrpcLookupUtils.GetTarget(request.Target, _targetStore);
            var          response = new ResolveLoadAddressResponse();
            SbAddress    address  = target.ResolveLoadAddress(request.Address);

            if (address != null)
            {
                response.Address = new GrpcSbAddress {
                    Id = _addressStore.AddObject(address),
                };
            }
            return(Task.FromResult(response));
        }
        // Returns the currently selected thread.
        public override Task <GetSelectedThreadResponse> GetSelectedThread(
            GetSelectedThreadRequest request, ServerCallContext context)
        {
            var sbProcess    = GrpcLookupUtils.GetProcess(request.Process, processStore);
            var sbThread     = sbProcess.GetSelectedThread();
            var grpcSbThread = new GrpcSbThread();

            if (sbThread != null)
            {
                var remoteThread = remoteThreadFactory.Create(sbThread);
                grpcSbThread.Id = threadStore.AddObject(remoteThread);
            }
            return(Task.FromResult(new GetSelectedThreadResponse {
                Thread = grpcSbThread
            }));
        }
        public override Task <GetUnixSignalsResponse> GetUnixSignals(
            GetUnixSignalsRequest request, ServerCallContext context)
        {
            var sbProcess = GrpcLookupUtils.GetProcess(request.Process, processStore);
            var signals   = sbProcess.GetUnixSignals();
            var response  = new GetUnixSignalsResponse();

            if (signals != null)
            {
                response.Signals = new GrpcSbUnixSignals
                {
                    Id = signalsStore.AddObject(signals)
                };
            }
            return(Task.FromResult(response));
        }
Пример #14
0
        public override Task <GetInstructionsResponse> GetInstructions(
            GetInstructionsRequest request, ServerCallContext context)
        {
            var function     = functionStore.GetObject(request.Function.Id);
            var target       = GrpcLookupUtils.GetTarget(request.Target, targetStore);
            var instructions = function.GetInstructions(target.GetSbTarget());
            var response     = new GetInstructionsResponse();

            if (instructions != null)
            {
                response.Instructions.Add(
                    instructions.Select(s => new GrpcSbInstruction
                {
                    Id = instructionStore.AddObject(s)
                }));
            }
            return(Task.FromResult(response));
        }
        public override Task <WriteMemoryResponse> WriteMemory(
            WriteMemoryRequest reqeust, ServerCallContext context)
        {
            var     sbProcess = GrpcLookupUtils.GetProcess(reqeust.Process, processStore);
            SbError error;
            var     sizeWrote = sbProcess.WriteMemory(reqeust.Address, reqeust.Buffer.ToByteArray(),
                                                      reqeust.Size, out error);

            return(Task.FromResult(new WriteMemoryResponse
            {
                Error = new GrpcSbError
                {
                    Success = error.Success(),
                    Error = error.GetCString()
                },
                Size = sizeWrote
            }));
        }
        public override Task <LoadCoreResponse> LoadCore(LoadCoreRequest request,
                                                         ServerCallContext context)
        {
            RemoteTarget target   = GrpcLookupUtils.GetTarget(request.Target, _targetStore);
            SbProcess    process  = target.LoadCore(request.CorePath);
            var          response = new LoadCoreResponse();

            if (process != null)
            {
                if (!_processStore.TryAdd(process.GetUniqueId(), process))
                {
                    ErrorUtils.ThrowError(StatusCode.Internal, "Could not add process to store: " +
                                          process.GetUniqueId());
                }
                response.Process = new GrpcSbProcess {
                    Id = process.GetUniqueId()
                };
            }
            return(Task.FromResult(response));
        }
        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));
        }