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;
}