在函数 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 函数中并不需要使用任何句柄。

Go 代码错误修复:`kernel32.Handle()` 的正确使用

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

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