# Class: com.pnfsoftware.jeb.core.units.code.asm.analyzer.AbstractAnalyzerExtension

Extension of the [INativeCodeAnalyzer](INativeCodeAnalyzer).

## Constructor: AbstractAnalyzerExtension

Description: Create an analyzer extension.

## Protected Field: gca
Type: `com.pnfsoftware.jeb.core.units.code.asm.analyzer.INativeCodeAnalyzer<InsnType>`
Description: Generic code analyzer that owns this extension.

## Protected Field: paddingVerifier
Type: `com.pnfsoftware.jeb.core.units.code.asm.analyzer.BinaryPatternVerifier`
Description: Padding pattern verifier initialized by [#initialize(INativeCodeAnalyzer)](#initialize(INativeCodeAnalyzer)).

## Protected Field: prologueVerifier
Type: `com.pnfsoftware.jeb.core.units.code.asm.analyzer.BinaryPatternVerifier`
Description: Prologue pattern verifier initialized by [#initialize(INativeCodeAnalyzer)](#initialize(INativeCodeAnalyzer)).

## Method: customizeInstructionItem
- parameter: `item`, type: `com.pnfsoftware.jeb.core.units.code.asm.items.INativeInstructionItem`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is false.

## Method: determinePotentialPointers
- parameter: `address`, type: `long`
- parameter: `insn`, type: `InsnType`
- parameter: `values`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.Pointer>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is false.

## Method: determinePotentialPointersInProtoBlock
- parameter: `blk`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlockSkeleton<InsnType>`
- parameter: `values`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.PointerLocation>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is false.

## Method: determineRoutineStackPointerDelta
- parameter: `routine`, type: `com.pnfsoftware.jeb.core.units.code.asm.cfg.CFG<InsnType>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Integer>`

Description: The default result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is null.

## Method: determineSwitchInformation
- parameter: `branchInstructionAddress`, type: `long`
- parameter: `branchInstructionBlock`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlockSkeleton<InsnType>`
- parameter: `knownBlocks`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.IBasicBlockSkeleton<InsnType>>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<com.pnfsoftware.jeb.core.units.code.asm.analyzer.SwitchInformation>`

Description: The default result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is null.

## Method: getPossiblePaddingSize
- parameter: `address`, type: `long`
- parameter: `addressMax`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Long>`

Description: Default implementation checks the patterns stored in [#paddingVerifier](#paddingVerifier). When alignment information are present, only unaligned data is considered padding. If nothing is found, result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is 0L.

## Method: getPreferredAdvancedAnalysisStage
- parameter: `routine`, type: `com.pnfsoftware.jeb.core.units.code.asm.items.INativeMethodItem`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<com.pnfsoftware.jeb.core.units.code.asm.decompiler.NativeDecompilationStage>`

Description: The default result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is [NativeDecompilationStage#SIMULATION](NativeDecompilationStage#SIMULATION).

## Method: getPreferredBreakingFlow
- parameter: `address`, type: `long`
- parameter: `insn`, type: `InsnType`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<com.pnfsoftware.jeb.core.units.code.IFlowInformation>`

Description: The default result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is null.

## Method: getPrimitiveSizes
- parameter: `subsystemType`, type: `com.pnfsoftware.jeb.core.units.codeobject.SubsystemType`
- parameter: `compilerType`, type: `com.pnfsoftware.jeb.core.units.codeobject.CompilerType`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.type.IPrimitiveSizes`

Description: The default implementation returns null.

## Method: getProbableEntryPoints
- parameter: `address`, type: `long`
- parameter: `addressMax`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.util.List<com.pnfsoftware.jeb.core.units.code.CodePointer>>`


## Method: getPrologueLooking
- parameter: `address`, type: `long`
- parameter: `addressMax`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<com.pnfsoftware.jeb.core.units.code.CodePointer>`

Description: Default implementation checks the patterns stored in [#prologueVerifier](#prologueVerifier). Can be overridden, but sub\-class should call super\-method first. If nothing is found, result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is null.

## Method: getTrampolineTarget
- parameter: `routine`, type: `com.pnfsoftware.jeb.core.units.code.asm.cfg.CFG<InsnType>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<? extends com.pnfsoftware.jeb.core.units.code.Pointer>`

Description: The default result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is null.

## Method: getUnit
- return type: `com.pnfsoftware.jeb.core.units.INativeCodeUnit<InsnType>`


## Method: initialize
- parameter: `analyzer`, type: `com.pnfsoftware.jeb.core.units.code.asm.analyzer.INativeCodeAnalyzer<InsnType>`

Description: Must be called by the GCA. We cannot use @SerCustomInit here, as the GCA may not exist yet \(eg, unprocessed unit\).

## Protected Method: initializePaddingPatterns
- parameter: `paddingVerifier`, type: `com.pnfsoftware.jeb.core.units.code.asm.analyzer.BinaryPatternVerifier`

Description: The default implementation does nothing.
parameter: paddingVerifier: verifier to populate

## Protected Method: initializeProloguePatterns
- parameter: `prologueVerifier`, type: `com.pnfsoftware.jeb.core.units.code.asm.analyzer.BinaryPatternVerifier`

Description: The default implementation does nothing.
parameter: prologueVerifier: verifier to initialize

## Method: isCandidateSwitchDispatcher
- parameter: `branchInstructionAddress`, type: `long`
- parameter: `branchInstruction`, type: `InsnType`
- parameter: `branchInstructionBlock`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlockSkeleton<InsnType>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is false.

## Method: isNonReturningRoutine
- parameter: `routine`, type: `com.pnfsoftware.jeb.core.units.code.asm.items.INativeMethodItem`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`


## Method: postprocessImage
- parameter: `passIndex`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`


## Method: preprocessImage
- parameter: `passIndex`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`


## Method: shouldForceRoutineEnd
- parameter: `address`, type: `long`
- parameter: `insn`, type: `InsnType`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default result \([ChainedOperationResult#getResult()](ChainedOperationResult#getResult())\) is false.

## Method: sigMatchingPostProcess
- parameter: `passIndex`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`


## Method: skipSymbolProcessing
- return type: `boolean`

Description: The default implementation returns false.

## Method: typeManagerInitialized
- parameter: `typeman`, type: `com.pnfsoftware.jeb.core.units.code.asm.type.ITypeManager`

Description: The default implementation does nothing.

## Method: verifyGapRoutineCandidate
- parameter: `address`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default implementation returns true, that is a candidate address for a routine creation in a gap will be authorized by default. Extensions that need to perform additional checks can override this method.

