mirror of
https://github.com/rwinkhart/sys.git
synced 2026-08-28 04:46:44 -04:00
windows: add low level memory related syscalls
Adds VirtualQuery, VirtualQueryEx, VirtualProtectEx, ReadProcessMemory, and WriteProcessMemory. VirtualProtect already exists. https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualquery https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualqueryex https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualprotectex https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-readprocessmemory https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-writeprocessmemory Change-Id: I609a09641c502d8d3802036123e0784b7c76e99b GitHub-Last-Rev: 368f8c7b620607aab2a1b8fefff656c38cb0dd6b GitHub-Pull-Request: golang/sys#117 Reviewed-on: https://go-review.googlesource.com/c/sys/+/352249 Trust: Alex Brainman <alex.brainman@gmail.com> Trust: Emmanuel Odeke <emmanuel@orijtech.com> Trust: Benny Siegert <bsiegert@gmail.com> Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
This commit is contained in:
@@ -777,3 +777,30 @@ func TestProcessModules(t *testing.T) {
|
||||
t.Fatalf("module size does not match executable: %v != %v", moduleInfo.SizeOfImage, peSizeOfImage)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReadWriteProcessMemory(t *testing.T) {
|
||||
testBuffer := []byte{0xBA, 0xAD, 0xF0, 0x0D}
|
||||
|
||||
process, err := windows.GetCurrentProcess()
|
||||
if err != nil {
|
||||
t.Fatalf("unable to get current process: %v", err)
|
||||
}
|
||||
|
||||
buffer := make([]byte, len(testBuffer))
|
||||
err = windows.ReadProcessMemory(process, uintptr(unsafe.Pointer(&testBuffer[0])), &buffer[0], uintptr(len(buffer)), nil)
|
||||
if err != nil {
|
||||
t.Errorf("ReadProcessMemory failed: %v", err)
|
||||
}
|
||||
if !bytes.Equal(testBuffer, buffer) {
|
||||
t.Errorf("bytes read does not match buffer: 0x%X != 0x%X", testBuffer, buffer)
|
||||
}
|
||||
|
||||
buffer = []byte{0xDE, 0xAD, 0xBE, 0xEF}
|
||||
err = windows.WriteProcessMemory(process, uintptr(unsafe.Pointer(&testBuffer[0])), &buffer[0], uintptr(len(buffer)), nil)
|
||||
if err != nil {
|
||||
t.Errorf("WriteProcessMemory failed: %v", err)
|
||||
}
|
||||
if !bytes.Equal(testBuffer, buffer) {
|
||||
t.Errorf("bytes written does not match buffer: 0x%X != 0x%X", testBuffer, buffer)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user