summaryrefslogtreecommitdiffhomepage
path: root/tun/wintun/memmod/memmod_windows_64.go
diff options
context:
space:
mode:
Diffstat (limited to 'tun/wintun/memmod/memmod_windows_64.go')
-rw-r--r--tun/wintun/memmod/memmod_windows_64.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/tun/wintun/memmod/memmod_windows_64.go b/tun/wintun/memmod/memmod_windows_64.go
new file mode 100644
index 0000000..46ac677
--- /dev/null
+++ b/tun/wintun/memmod/memmod_windows_64.go
@@ -0,0 +1,36 @@
+// +build amd64 arm64
+
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2020 WireGuard LLC. All Rights Reserved.
+ */
+
+package memmod
+
+import (
+ "fmt"
+
+ "golang.org/x/sys/windows"
+)
+
+func (opthdr *IMAGE_OPTIONAL_HEADER) imageOffset() uintptr {
+ return uintptr(opthdr.ImageBase & 0xffffffff00000000)
+}
+
+func (module *Module) check4GBBoundaries(alignedImageSize uintptr) (err error) {
+ for (module.codeBase >> 32) < ((module.codeBase + alignedImageSize) >> 32) {
+ node := &addressList{
+ next: module.blockedMemory,
+ address: module.codeBase,
+ }
+ module.blockedMemory = node
+ module.codeBase, err = windows.VirtualAlloc(0,
+ alignedImageSize,
+ windows.MEM_RESERVE|windows.MEM_COMMIT,
+ windows.PAGE_READWRITE)
+ if err != nil {
+ return fmt.Errorf("Error allocating memory block: %v", err)
+ }
+ }
+ return
+}