github.com/pkujhd/goloader@v0.0.0-20240411034752-1a28096bd7bd/functab.1.18.go (about) 1 //go:build go1.18 && !go1.23 2 // +build go1.18,!go1.23 3 4 package goloader 5 6 import ( 7 "unsafe" 8 9 "github.com/pkujhd/goloader/obj" 10 ) 11 12 type functab struct { 13 entry uint32 14 funcoff uint32 15 } 16 17 func initfunctab(entry, funcoff, text uintptr) functab { 18 functabdata := functab{ 19 entry: uint32(entry - text), 20 funcoff: uint32(funcoff), 21 } 22 return functabdata 23 } 24 25 func addfuncdata(module *moduledata, Func *obj.Func, _func *_func) { 26 funcdata := make([]uint32, 0) 27 for _, v := range Func.FuncData { 28 if v != 0 { 29 funcdata = append(funcdata, (uint32)(v)) 30 } else { 31 funcdata = append(funcdata, ^uint32(0)) 32 } 33 } 34 append2Slice(&module.pclntable, uintptr(unsafe.Pointer(&funcdata[0])), Uint32Size*int(_func.Nfuncdata)) 35 }