使用 cgo 挂钩系统调用“fork”

问题描述

我正在尝试使用 Go 在 Linux 中挂钩 fork 系统调用

package main

/*
#include <unistd.h>
*/
import "C"

import (
    "fmt"
    "os"

    "github.com/rainycape/dl"
)

func main() {}

//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()
}

当我以 LD_PRELOAD 编译并运行时,发生 Panic

panic: reflect.MakeFunc: value of type `int32` is not assignable to type main._Ctype_int

解决方法

你应该设置一些指令来运行它。请看一下它的官方文档。 using cgo - Golang official doc