Не удалось найти процедуру RtlCopyMemory в ntdll.dll, только когда GOARCH = 386 - PullRequest
0 голосов
/ 31 октября 2019

Когда 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-битной)

...