Когда GOARCH = 386, следующий код возвратит следующую ошибку
package main
import (
"syscall"
)
var (
kernel32 = syscall.MustLoadDLL("kernel32.dll")
ntdll = syscall.MustLoadDLL("ntdll.dll")
VirtualAlloc = kernel32.MustFindProc("VirtualAlloc")
RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory")
)
func main() {}
Ошибка:
C:\Users\me\code\shellGo>main.exe
panic: Failed to find RtlCopyMemory procedure in ntdll.dll: The specified procedure could not be found.
goroutine 1 [running]:
syscall.(*DLL).MustFindProc(0x11004070, 0x46481f, 0xd, 0x11004080)
C:/go/src/syscall/dll_windows.go:134 +0x5c
main.init.ializers()
C:/Users/me/code/shellGo/main.go:10 +0xc9
Я проверил в procmon, и DLL, кажется, загружен правильно. Код работает нормально, когда GOARCH = amd64. Обратите внимание, что я на 64-битной, но я пытаюсь скомпилировать это в 32-битной для совместимости.
Edit: я подумал, что я могу использовать RtlMoveMemory, но тогда шелл-код не работает на 32-битной. Хорошо работает на 64-битной (и да, я изменяю свой шелл-код, чтобы соответствовать 32 или 64-битной)