2014-10-18 01:34:58 +00:00
|
|
|
package proctl
|
|
|
|
|
2014-12-08 23:40:59 +00:00
|
|
|
import "syscall"
|
2014-12-05 18:35:17 +00:00
|
|
|
|
2014-12-08 23:54:34 +00:00
|
|
|
type Regs struct {
|
|
|
|
regs *syscall.PtraceRegs
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *Regs) PC() uint64 {
|
|
|
|
return r.regs.PC()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *Regs) SP() uint64 {
|
|
|
|
return r.regs.Rsp
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *Regs) SetPC(tid int, pc uint64) error {
|
|
|
|
r.regs.SetPC(pc)
|
|
|
|
return syscall.PtraceSetRegs(tid, r.regs)
|
|
|
|
}
|
|
|
|
|
|
|
|
func registers(tid int) (Registers, error) {
|
|
|
|
var regs syscall.PtraceRegs
|
|
|
|
err := syscall.PtraceGetRegs(tid, ®s)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return &Regs{®s}, nil
|
|
|
|
}
|
|
|
|
|
2014-12-09 16:51:17 +00:00
|
|
|
func writeMemory(tid int, addr uintptr, data []byte) (int, error) {
|
2014-12-08 23:40:59 +00:00
|
|
|
return syscall.PtracePokeData(tid, addr, data)
|
2014-10-18 01:34:58 +00:00
|
|
|
}
|
|
|
|
|
2014-12-09 16:51:17 +00:00
|
|
|
func readMemory(tid int, addr uintptr, data []byte) (int, error) {
|
2014-12-08 23:40:59 +00:00
|
|
|
return syscall.PtracePeekData(tid, addr, data)
|
2014-10-18 01:34:58 +00:00
|
|
|
}
|
2015-01-10 23:33:06 +00:00
|
|
|
|
|
|
|
func clearHardwareBreakpoint(reg, tid int) error {
|
|
|
|
return setHardwareBreakpoint(reg, tid, 0)
|
|
|
|
}
|