angr.go.optimization_passes.pinned_register_rewriter

class angr.go.optimization_passes.pinned_register_rewriter.GoPinnedRegisterRewriter

Bases: OptimizationPass

Fold reads of the ABI zero register (X15 on amd64) into the constant 0.

Compiled Go code never writes the zero register, so its reads are the constant 0 rather than an undefined input; leaving them alone turns every zero-initialization into a phantom parameter.

ARCHES = None
PLATFORMS = None
STAGE: OptimizationPassStage = 1
NAME = 'Fold the Go zero register into constants'
__init__(func, manager, **kwargs)
class angr.go.optimization_passes.pinned_register_rewriter.GoWideZeroStoreSplitter

Bases: OptimizationPass

MOVUPS X15, off(SP) zeroes two words of a frame slot at once. Split it into word stores so the words of a slice/string header kept in the frame stay separate stack variables instead of one 16-byte variable that every later word write updates with an insert.

ARCHES = None
PLATFORMS = None
STAGE: OptimizationPassStage = 3
NAME = 'Split Go wide zero stores into words'
__init__(func, manager, **kwargs)