Files
go_pwner/context.go
T
2026-07-18 21:37:15 +03:00

61 lines
1.6 KiB
Go

package winpwn
import "time"
// Arch identifies the target architecture, the winpwn analogue of pwntools'
// context.arch. Windows has no big-endian target, so unlike pwntools this
// only ever changes pointer width (P32 vs P64 callers), never byte order --
// P16/P32/P64 stay little-endian-only by design (see packing.go).
type Arch int
const (
ArchX86 Arch = iota
ArchX64
)
func (a Arch) String() string {
if a == ArchX86 {
return "x86"
}
return "x64"
}
// LogLevel gates which Log* calls in log.go actually print, the winpwn
// analogue of pwntools' context.log_level.
type LogLevel int
const (
LogLevelDebug LogLevel = iota
LogLevelInfo
LogLevelWarn
LogLevelError
LogLevelSilent
)
// Ctx is the global, mutable settings object every winpwn entry point reads
// defaults from -- the analogue of pwntools' single shared pwnlib.context
// object. Mutate the package-level Context variable directly, the same way
// scripts do `context.arch = 'amd64'` in pwntools.
type Ctx struct {
Arch Arch
LogLevel LogLevel
// Timeout is the default per-call deadline for Tube.Recv*/Send*
// (zero means block forever, matching pwntools' Timeout.forever).
// Override per tube with (*Tube).SetTimeout.
Timeout time.Duration
// Newline is what SendLine appends and RecvLine splits on.
Newline []byte
}
// Context is the single global settings instance. There is deliberately no
// constructor/getter ceremony around it -- read or write its fields directly,
// exactly like pwntools' module-level `context`.
var Context = &Ctx{
Arch: ArchX64,
LogLevel: LogLevelInfo,
Timeout: 0,
Newline: []byte("\n"),
}