Я пытаюсь понять некоторые подробности низкоуровневого пакета Golangs syscall. В частности, меня интересуют системные вызовы Windows -specifi c (см. Пример ниже).
Я могу найти определение syscall.Syscall()
для систем UNIX:
Однако я не могу найти какие-либо такое определение для Windows систем, таких как asm_windows_amd64.s
.
В частности, asm_unix_amd64.s
имеет следующую директиву сборки, поэтому его определение ·Syscall(SB),NOSPLIT,$0-56
не может быть тем, которое также вызывается для Windows системные вызовы:
1// +build netbsd freebsd openbsd dragonfly
Где определено syscall.Syscall()
для систем Windows?
Пример: https://godoc.org/golang.org/x/sys/windows#example -LoadLibrary
h, err := windows.LoadLibrary("kernel32.dll")
if err != nil {
abort("LoadLibrary", err)
}
defer windows.FreeLibrary(h)
proc, err := windows.GetProcAddress(h, "GetVersion")
if err != nil {
abort("GetProcAddress", err)
}
r, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0)
major := byte(r)
minor := uint8(r >> 8)
build := uint16(r >> 16)
print("windows version ", major, ".", minor, " (Build ", build, ")\n")