github.com/MerlinKodo/sing-tun@v0.1.15/internal/wintun/memmod/memmod_windows_64.go (about) 1 //go:build (windows && amd64) || (windows && arm64) 2 3 /* SPDX-License-Identifier: MIT 4 * 5 * Copyright (C) 2017-2021 WireGuard LLC. All Rights Reserved. 6 */ 7 8 package memmod 9 10 import ( 11 "fmt" 12 13 "golang.org/x/sys/windows" 14 ) 15 16 func (opthdr *IMAGE_OPTIONAL_HEADER) imageOffset() uintptr { 17 return uintptr(opthdr.ImageBase & 0xffffffff00000000) 18 } 19 20 func (module *Module) check4GBBoundaries(alignedImageSize uintptr) (err error) { 21 for (module.codeBase >> 32) < ((module.codeBase + alignedImageSize) >> 32) { 22 node := &addressList{ 23 next: module.blockedMemory, 24 address: module.codeBase, 25 } 26 module.blockedMemory = node 27 module.codeBase, err = windows.VirtualAlloc(0, 28 alignedImageSize, 29 windows.MEM_RESERVE|windows.MEM_COMMIT, 30 windows.PAGE_READWRITE) 31 if err != nil { 32 return fmt.Errorf("Error allocating memory block: %w", err) 33 } 34 } 35 return 36 }