dl
dl copied to clipboard
dl load "fork" failed
compile a LD_PRELOAD so using following code
//export fork
func fork() C.pid_t {
lib, err := dl.Open("libc", 0)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer lib.Close()
var old_fork func() C.pid_t
lib.Sym("fork", &old_fork)
return old_fork()
}
run command
# LD_PRELOAD=`pwd`/libshellhook.so bash
panic: reflect.MakeFunc: value of type int32 is not assignable to type main._Ctype_int
goroutine 17 [running, locked to thread]:
reflect.Value.assignTo(0x7f61b5cfda60, 0xc00001808c, 0x85, 0x7f61b5ac9ec4, 0x10, 0x7f61b5cfdc60, 0xc000042df0, 0x7f61b5a8ac25, 0x7f61b5ac7a20, 0xc000042cf8)
/usr/local/go/src/reflect/value.go:2435 +0x405
reflect.callReflect(0xc00006a2d0, 0xc000042df0, 0xc000042dd8)
/usr/local/go/src/reflect/value.go:600 +0x4b9
reflect.makeFuncStub(0xc000046280, 0x7f61b5ac7f3b, 0x4, 0x7f61b5cf9180, 0xc000010030, 0x0, 0x0, 0x0, 0x0, 0xc000046280, ...)
/usr/local/go/src/reflect/asm_amd64.s:20 +0x44
main.fork(0x0)
/work/golib/main.go:83 +0x149
main._cgoexpwrap_032d238aa31d_fork(0x77c3a0)
_cgo_gotypes.go:85 +0x25