登录
首页 >  Golang >  Go问答

在Golang中,与.Net中的Marshal.Copy方法等效的是什么?

来源:stackoverflow

时间:2024-02-20 14:00:26 300浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《在Golang中,与.Net中的Marshal.Copy方法等效的是什么?》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我正在尝试修补 golang 中的一块内存。我关闭了 virtualprotect 功能,并且内存块正在更改为 rw,但我找不到用于复制到内存的 golang 功能。

我想从 powershell 脚本模拟这一点:

[system.runtime.interopservices.marshal]::copy($patch, 0, $targetedaddress, 3)

我目前拥有的 golang 代码如下:

var patch = []byte {
    0x31, 0xC0, // xor rax, rax
    0xC3,        // ret
}

var oldfperms uint32
virtualProt(unsafe.Pointer(&patchAddr), unsafe.Sizeof(uintptr(2)), uint32(0x40), 
unsafe.Pointer(&oldfperms)) // Modify region for ReadWrite

var r uintptr
for _, b := range patch {
    r = (r << 8) | uintptr(b)
}

patch := unsafe.Pointer(uintptr(r)) // Attempting to copy into memory here and I'm stumped
fmt.Println(patch)

var a uint32
virtualProt(unsafe.Pointer(&patchAddr), unsafe.Sizeof(uintptr(2)), oldfperms, unsafe.Pointer(&a)) // Change region back to normal

正确答案


没关系。找到对 win32 writeprocessmemory 函数的引用并使用它。

https://pkg.go.dev/github.com/0xrawsec/golang-win32/win32/kernel32#WriteProcessMemory

func WriteProcMem(currProccess uintptr, patchAddr uintptr, patch uintptr) bool {

    kern32WriteMem := syscall.NewLazyDLL("kernel32.dll").NewProc("WriteProcessMemory")
    _, _, _ = kern32WriteMem.Call(
    currProccess,
    patchAddr,
    patch)
    fmt.Println("[+] Patched Memory!")
    return true

}

理论要掌握,实操不能落!以上关于《在Golang中,与.Net中的Marshal.Copy方法等效的是什么?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>