2026-08-01 09:47:00 +02:00
|
|
|
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
|
|
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
|
|
|
|
|
|
//go:build linux && amd64
|
|
|
|
|
|
|
|
|
|
package debug
|
|
|
|
|
|
2026-08-20 23:57:10 +02:00
|
|
|
import "fmt"
|
2026-08-01 09:47:00 +02:00
|
|
|
|
|
|
|
|
// SetReg modifies a register value in the debuggee.
|
|
|
|
|
func (s *Session) SetReg(name string, value uint64) error {
|
|
|
|
|
regs, err := s.GetRegs()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
switch name {
|
|
|
|
|
case "rax", "eax", "ax", "al":
|
|
|
|
|
regs.RAX = value
|
|
|
|
|
case "rbx", "ebx", "bx", "bl":
|
|
|
|
|
regs.RBX = value
|
|
|
|
|
case "rcx", "ecx", "cx", "cl":
|
|
|
|
|
regs.RCX = value
|
|
|
|
|
case "rdx", "edx", "dx", "dl":
|
|
|
|
|
regs.RDX = value
|
|
|
|
|
case "rsi", "esi", "si":
|
|
|
|
|
regs.RSI = value
|
|
|
|
|
case "rdi", "edi", "di":
|
|
|
|
|
regs.RDI = value
|
|
|
|
|
case "rbp", "ebp", "bp":
|
|
|
|
|
regs.RBP = value
|
|
|
|
|
case "rsp", "esp", "sp":
|
|
|
|
|
regs.RSP = value
|
|
|
|
|
case "r8":
|
|
|
|
|
regs.R8 = value
|
|
|
|
|
case "r9":
|
|
|
|
|
regs.R9 = value
|
|
|
|
|
case "r10":
|
|
|
|
|
regs.R10 = value
|
|
|
|
|
case "r11":
|
|
|
|
|
regs.R11 = value
|
|
|
|
|
case "r12":
|
|
|
|
|
regs.R12 = value
|
|
|
|
|
case "r13":
|
|
|
|
|
regs.R13 = value
|
|
|
|
|
case "r14":
|
|
|
|
|
regs.R14 = value
|
|
|
|
|
case "r15":
|
|
|
|
|
regs.R15 = value
|
|
|
|
|
case "rip", "eip":
|
|
|
|
|
regs.RIP = value
|
|
|
|
|
default:
|
|
|
|
|
return fmt.Errorf("debug: unknown register %q", name)
|
|
|
|
|
}
|
|
|
|
|
return s.SetRegs(®s)
|
|
|
|
|
}
|