Go 代码错误修复:`kernel32.Handle()` 的正确使用
在函数 writeMemory 中,kernel32.Handle() 返回的是一个 syscall.Handle 类型的变量,而不是一个函数。因此,调用 uintptr(kernel32.Handle()) 会导致编译错误。
正确的做法是直接使用 syscall.Handle 类型的变量,如下所示:
func writeMemory(data []byte, address uintptr) (int, error) {
var bytesWritten uintptr
ret, _, err := syscall.Syscall(
uintptr(syscall.Handle(0xffffffff)), // 传入无效的句柄
uintptr(unsafe.Pointer(&data[0])),
uintptr(len(data)),
uintptr(address),
uintptr(unsafe.Pointer(&bytesWritten)),
0,
)
if ret == 0 {
return 0, fmt.Errorf('failed to write memory: %v', err)
}
return int(bytesWritten), nil
}
在这里,syscall.Handle(0xffffffff) 表示一个无效的句柄,这是因为在 writeMemory 函数中并不需要使用任何句柄。
原文地址: https://www.cveoy.top/t/topic/lNkS 著作权归作者所有。请勿转载和采集!