从已执行的命令中编译代码

编程语言 2026-07-09

我正在开发一个黑客系统,涉及把黑客脚本编译成要注入到一个CTF服务器中的代码。我的目标是通过在Go代码中执行 go build 来编译每个脚本,因为CTF服务器不支持Go。我的做法未必是最佳的,也许Stack Overflow的网友有不同的解决方案,我很乐意看看。

尽管我的代码是手动编译的,但我找不出为什么它不能通过从命令行运行 go build 来实现。当我记录 command.Run() 返回的错误值时,我只得到 nil

这是我的代码:

func ForgeHacker(level int) {
    log.Println("[*] Forging hacker")
    cw, err := os.Getwd()
    Panic(err) // Custom error handler
    dir, _ := filepath.Split(cw)
    l := fmt.Sprint("hacker_", level)
    log.Println("New cw", cw) // Logging to be sure I'm changing command.Dir properly
    c := exec.Command("go", "build", "hacker.go")
    c.Dir = filepath.Join(dir, l)
    log.Println("Command directory", c.Dir) // Logs correctly where hacker.go script is
    err = c.Run()
    log.Fatalln("Hacker build failed: ", c.Stderr) // Logs nil, I'm clueless here
    Panic(err)
}

有人能帮我理解我在这里做错了什么或缺少什么吗?

解决方案

@MindSwipe指出了我的问题。我必须用 cmd.CombinedOutput() 来记录我的命令输出。虽然这并不是解决为什么不能从外部命令构建的根本原因,但对于了解正在发生的情况确实很有帮助。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章