commit this WIP stuff to a feature branch

This commit is contained in:
brent saner
2025-12-06 19:19:53 -05:00
parent 803be548cf
commit 241a46c9b4
8 changed files with 981 additions and 317 deletions

1
internal/mem/consts.go Normal file
View File

@@ -0,0 +1 @@
package mem

81
internal/mem/funcs.go Normal file
View File

@@ -0,0 +1,81 @@
package mem
import (
"encoding/binary"
"unsafe"
"golang.org/x/sys/unix"
)
func getStdRIP(r *unix.PtraceRegs) (rip uint64) {
return
}
func getRIP(r *unix.PtraceRegs) uint64 {
// amd64
if binary.Size(unix.PtraceRegs{}) == 216 {
return r.Rip
}
// arm64
type regsArm64 struct{ Regs [18]uint64 }
return (*regsArm64)(unsafe.Pointer(r)).Regs[16] // PC
}
func setRIP(r *unix.PtraceRegs, v uint64) *unix.PtraceRegs {
if binary.Size(unix.PtraceRegs{}) == 216 {
r.Rip = v
} else {
type regsArm64 struct{ Regs [18]uint64 }
(*regsArm64)(unsafe.Pointer(r)).Regs[16] = v
}
return r
}
func getRSP(r *unix.PtraceRegs) uint64 {
if binary.Size(unix.PtraceRegs{}) == 216 {
return r.Rsp
}
type regsArm64 struct{ Regs [18]uint64 }
return (*regsArm64)(unsafe.Pointer(r)).Regs[17] // SP
}
func setRSP(r *unix.PtraceRegs, v uint64) *unix.PtraceRegs {
if binary.Size(unix.PtraceRegs{}) == 216 {
r.Rsp = v
} else {
type regsArm64 struct{ Regs [18]uint64 }
(*regsArm64)(unsafe.Pointer(r)).Regs[17] = v
}
return r
}
func setArg0(r *unix.PtraceRegs, v uint64) *unix.PtraceRegs {
if binary.Size(unix.PtraceRegs{}) == 216 {
r.Rdi = v
} else {
type regsArm64 struct{ Regs [18]uint64 }
(*regsArm64)(unsafe.Pointer(r)).Regs[0] = v // X0
}
return r
}
func setArg1(r *unix.PtraceRegs, v uint64) *unix.PtraceRegs {
if binary.Size(unix.PtraceRegs{}) == 216 {
r.Rsi = v
} else {
type regsArm64 struct{ Regs [18]uint64 }
(*regsArm64)(unsafe.Pointer(r)).Regs[1] = v // X1
}
return r
}
func setArg2(r *unix.PtraceRegs, v uint64) *unix.PtraceRegs {
if binary.Size(unix.PtraceRegs{}) == 216 {
r.Rdx = v
} else {
type regsArm64 struct{ Regs [18]uint64 }
(*regsArm64)(unsafe.Pointer(r)).Regs[2] = v // X2
}
return r
}