linux - 使用cgo挂接syscall “fork”

标签 linux go cgo ld-preload

我正在尝试使用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

关于linux - 使用cgo挂接syscall “fork”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65880192/

相关文章:

linux - 正常关闭时的默认 Redis 行为

c - 如果 vfork() 调用 exec 族,为什么它不是未定义的?

go - 通过设置 Local 在 go 中全局设置时区

http - HTTP 代理是否应该将 Content-Encoding header 复制回客户端?

objective-c - 在将 objective-c 与 golang 1.1 链接时出现问题 - 正在使用 golang 1.1beta

linux - 使用 bash 解析日志以获取唯一的 MAC 地址

linux - Bash - 获取命令的输出

go - 使用来自不同文件的golang中的接口(interface)方法

go - cgo 和 pkg 配置

go - cgo **char slice 字符串