refactor(windows): split Windows code into winapi (#575)

This commit is contained in:
Roger
2026-04-19 18:12:37 +08:00
committed by GitHub
parent 76e2615db2
commit ae1ec66ccb
21 changed files with 876 additions and 456 deletions
+2 -2
View File
@@ -3,7 +3,7 @@ ABE_ARCH ?= amd64
ABE_TARGET ?= x86_64-windows-gnu
ABE_SRC_DIR = crypto/windows/abe_native
ABE_BIN_DIR = crypto
ABE_BIN_DIR = crypto/windows/payload
ABE_BIN = $(ABE_BIN_DIR)/abe_extractor_$(ABE_ARCH).bin
ABE_CFLAGS = -shared -s -O2 \
@@ -38,7 +38,7 @@ payload-verify: $(ABE_BIN)
fi
payload-clean:
rm -f $(ABE_BIN_DIR)/abe_extractor_*.bin
rm -f $(ABE_BIN_DIR)/abe_extractor_*.bin $(ABE_BIN_DIR)/abe_extractor*.lib
# Scratch-layout codegen. The C header bootstrap_layout.h is the single
# source of truth; the Go constants in crypto/windows/abe_native/bootstrap
+32
View File
@@ -0,0 +1,32 @@
//go:build windows && abe_embed
// Package payload holds the compiled reflective-injection ABE payload
// binary and exposes it to the rest of HackBrowserData. The `abe_embed`
// build tag selects between a real //go:embed'd binary (this file) and
// a stub (stub_windows.go) so the default `go build ./...` succeeds on
// machines without the zig toolchain.
package payload
import (
_ "embed"
"fmt"
)
//go:generate make -C ../../.. payload
//go:embed abe_extractor_amd64.bin
var abePayloadAmd64 []byte
// Get returns the embedded ABE payload for the given architecture.
// Only "amd64" is supported today; x86 / ARM64 payloads are future work.
func Get(arch string) ([]byte, error) {
switch arch {
case "amd64":
if len(abePayloadAmd64) == 0 {
return nil, fmt.Errorf("abe: amd64 payload is empty (build system bug)")
}
return abePayloadAmd64, nil
default:
return nil, fmt.Errorf("abe: arch %q not supported in this build", arch)
}
}
+15
View File
@@ -0,0 +1,15 @@
//go:build windows && !abe_embed
package payload
import "fmt"
// Get returns an error in non-release builds so feature code that needs
// the payload fails fast with a clear message. Release builds (built
// with -tags abe_embed) replace this with the //go:embed'd binary.
func Get(arch string) ([]byte, error) {
return nil, fmt.Errorf(
"abe: payload not embedded in this build (rebuild with -tags abe_embed; arch=%s)",
arch,
)
}