Return regs from saveRegisters function
This commit is contained in:
parent
f7632eb5b0
commit
c414c72ec9
@ -90,14 +90,11 @@ func (thread *ThreadContext) CallFn(name string, fn func() error) error {
|
|||||||
}
|
}
|
||||||
defer thread.Process.Clear(bp.Addr)
|
defer thread.Process.Clear(bp.Addr)
|
||||||
|
|
||||||
if err = thread.saveRegisters(); err != nil {
|
regs, err := thread.saveRegisters()
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
regs, err := thread.Registers()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
previousFrame := make([]byte, f.FrameSize)
|
previousFrame := make([]byte, f.FrameSize)
|
||||||
frameSize := uintptr(regs.SP() + uint64(f.FrameSize))
|
frameSize := uintptr(regs.SP() + uint64(f.FrameSize))
|
||||||
if _, err := readMemory(thread, frameSize, previousFrame); err != nil {
|
if _, err := readMemory(thread, frameSize, previousFrame); err != nil {
|
||||||
|
@ -83,12 +83,12 @@ func readMemory(thread *ThreadContext, addr uintptr, data []byte) (int, error) {
|
|||||||
return len(data), nil
|
return len(data), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (thread *ThreadContext) saveRegisters() error {
|
func (thread *ThreadContext) saveRegisters() (Registers, error) {
|
||||||
kret := C.get_registers(C.mach_port_name_t(thread.os.thread_act), &thread.os.registers)
|
kret := C.get_registers(C.mach_port_name_t(thread.os.thread_act), &thread.os.registers)
|
||||||
if kret != C.KERN_SUCCESS {
|
if kret != C.KERN_SUCCESS {
|
||||||
return fmt.Errorf("could not save register contents")
|
return nil, fmt.Errorf("could not save register contents")
|
||||||
}
|
}
|
||||||
return nil
|
return &Regs{pc: uint64(thread.os.registers.__rip), sp: uint64(thread.os.registers.__rsp)}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (thread *ThreadContext) restoreRegisters() error {
|
func (thread *ThreadContext) restoreRegisters() error {
|
||||||
|
@ -50,8 +50,11 @@ func (t *ThreadContext) blocked() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (thread *ThreadContext) saveRegisters() error {
|
func (thread *ThreadContext) saveRegisters() (Registers, error) {
|
||||||
return sys.PtraceGetRegs(thread.Id, &thread.os.registers)
|
if err := sys.PtraceGetRegs(thread.Id, &thread.os.registers); err != nil {
|
||||||
|
return nil, fmt.Errorf("could not save register contents")
|
||||||
|
}
|
||||||
|
return &Regs{&thread.os.registers}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (thread *ThreadContext) restoreRegisters() error {
|
func (thread *ThreadContext) restoreRegisters() error {
|
||||||
|
Loading…
Reference in New Issue
Block a user