// Package dhaemarker provides the Dhaedalida RabbitStart / RabbitEnd protection markers
// for Go on windows/amd64.
//
// The markers are implemented in Plan 9 assembly (dhaemarker_amd64.s) and emit the
// same magic bytes as the C SDK binding (see sdk/dhae_marker_sig.h), so the
// Dhaedalida GUI detects a Go function that calls them. Bracket the function you
// want protected:
//
//	func validateLicense(key string) bool {
//	    dhaemarker.RabbitStart()
//	    // ... sensitive code ...
//	    dhaemarker.RabbitEnd()
//	    return true
//	}
//
// Caveats specific to Go (see this dir's README.md): Go's linker may enumerate
// functions differently from MSVC, and a call from Go into an ABI0 asm function
// goes through a compiler-generated ABI wrapper. Verify a given build with
// tools/dhae-marker-scan; if the GUI cannot auto-list a Go function, protect it
// by passing its VA to the CLI's --rabbit directly.
package dhaemarker

// RabbitStart marks the start of a region to virtualize; the enclosing function is
// what gets protected (method granularity).
func RabbitStart()

// RabbitEnd marks the end of a region to virtualize.
func RabbitEnd()

// BearStart marks the start of a region to protect with the STACK VM: the
// strongest of the three modes and by far the slowest (a bytecode interpreter --
// budget roughly 80x native, so this is for a licence check or a key
// schedule, never a hot loop). 64-bit only in this version -- on a 32-bit target
// a Bear-marked function is virtualized instead. A function carrying two
// marker pairs is REFUSED, not resolved.
func BearStart()

// BearEnd marks the end of a region to protect with Bear.
func BearEnd()
