private void SetRegistersButton_Click(object sender, EventArgs e) { if (OrbisDbg.IsProcessPaused()) { OrbisDbg.SetRegisters(GetRegisters()); } else { MessageBox.Show("The process must be paused before you can get/set registers", "Error Getting Registers"); } }
private void UpdateFormsOnPaused() { OrbisDbg.registers regs = OrbisDbg.GetRegisters(); if (!bUpdatedOnPause) { bool isBreakpoint = OrbisDbg.Ext.ReadByte(regs.r_rip - 1) == 0xCC; ulong breakAddress = isBreakpoint ? regs.r_rip - 1 : regs.r_rip; if (isBreakpoint) { for (int i = 0; i < breakpoints.Count; i++) { if (breakpoints[i].address == breakAddress) { OrbisDbg.Ext.WriteByte(breakAddress, breakpoints[i].instruction); break; } } regs.r_rip -= 1; OrbisDbg.SetRegisters(regs); } if (memoryForm != null) { memoryForm.UpdateMemoryView(regs.r_rip, 0x1000, OrbisDbg.GetMemory(regs.r_rip, 0x1000)); } if (registersForm != null) { registersForm.UpdateRegisterWindow(regs); } } if (disassemblyForm != null && regs.r_rip != PreviousRip) { if (PreviousRip != 0 && regs.r_rip > PreviousRip && regs.r_rip - PreviousRip < 0xD0) { disassemblyForm.UpdateDisassemblyKeepMemory(regs.r_rip); } else { PreviousRip = regs.r_rip; byte[] memory = OrbisDbg.GetMemory(regs.r_rip, 0x100); disassemblyForm.UpdateDisassembly(regs.r_rip, memory, disassemblyForm.IsShowingBytes()); } } bUpdatedOnPause = true; }