2015-06-12 19:49:23 +00:00
|
|
|
package proc
|
2014-10-18 01:34:58 +00:00
|
|
|
|
2015-01-25 23:16:18 +00:00
|
|
|
import sys "golang.org/x/sys/unix"
|
2014-12-05 18:35:17 +00:00
|
|
|
|
2014-12-08 23:54:34 +00:00
|
|
|
type Regs struct {
|
2015-01-25 23:16:18 +00:00
|
|
|
regs *sys.PtraceRegs
|
2014-12-08 23:54:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (r *Regs) PC() uint64 {
|
|
|
|
return r.regs.PC()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *Regs) SP() uint64 {
|
|
|
|
return r.regs.Rsp
|
|
|
|
}
|
|
|
|
|
2015-06-11 20:17:56 +00:00
|
|
|
func (r *Regs) CX() uint64 {
|
|
|
|
return r.regs.Rcx
|
|
|
|
}
|
|
|
|
|
2015-06-13 04:47:30 +00:00
|
|
|
func (r *Regs) SetPC(thread *Thread, pc uint64) (err error) {
|
2014-12-08 23:54:34 +00:00
|
|
|
r.regs.SetPC(pc)
|
2015-06-13 04:47:30 +00:00
|
|
|
thread.dbp.execPtraceFunc(func() { err = sys.PtraceSetRegs(thread.Id, r.regs) })
|
|
|
|
return
|
2014-12-08 23:54:34 +00:00
|
|
|
}
|
|
|
|
|
2015-06-12 19:51:23 +00:00
|
|
|
func registers(thread *Thread) (Registers, error) {
|
2015-06-13 04:47:30 +00:00
|
|
|
var (
|
|
|
|
regs sys.PtraceRegs
|
|
|
|
err error
|
|
|
|
)
|
|
|
|
thread.dbp.execPtraceFunc(func() { err = sys.PtraceGetRegs(thread.Id, ®s) })
|
2014-12-08 23:54:34 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return &Regs{®s}, nil
|
|
|
|
}
|