GO 开发示例

如果加载执行的动态库需要传入参数,这时候就需要强制指定入口点,然后去解析传入的参数。

因为 CrossC2 beacon 由纯粹的 C 开发完成,所以导出函数的变量类型也是 C 的,调用之前需要对传入的变量进行类型转换。

下面的代码展示了需要导出的函数类型定义及传入参数的解析

import (
    "C"
    ....
)

//export crossc2_entry
func crossc2_entry(argc C.int, argv  **C.char) int {
    fmt.Println(argc)
    tmpslice := (*[1 << 30]*C.char)(unsafe.Pointer(argv))[:argc:argc]
    goArgv := make([]string, argc)
    for i, s := range tmpslice {
        goArgv[i] = C.GoString(s)
        fmt.Println(goArgv[i])
    }

    ...
    // use (argc, goArgv)
    ...

    return 10;
}

results matching ""

    No results matching ""