# Class: com.pnfsoftware.jeb.core.units.code.asm.decompiler.AbstractNativeDecompilerExtension

Skeleton for native decompiler extensions. Implementations must extend this class, they should not directly implement the extension interface. 

 Decompiler extensions are of two kinds:
 \- the primary extension, optionally provided by a decompiler plugin: this extension is always executed first by an extensions manager \(and therefore, can decide to stop the execution of any subsequent extension\), in the context of its decompiler
 \- secondary \(additional\) extensions, provided as external plugins to JEB: those extensions are shared objects among the native decompiler objects instantiated during a session. They must check the type of decompiler before performing meaningful operations \(eg, an secondary extension meant to enhance an EVM decompiler should first make sure that it is called within the context of an EVM decompiler\)

## Constructor: AbstractNativeDecompilerExtension

Description: Create an unnamed native decompiler extension.

## Constructor: AbstractNativeDecompilerExtension
- parameter: `name`, type: `java.lang.String`

Description: Create a native decompiler extension.
parameter: name: extension name

## Protected Static Field: logger
Type: `com.pnfsoftware.jeb.util.logging.ILogger`

## Method: applyAdditionalTypes
- parameter: `target`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IDecompiledMethod`
- parameter: `cfg`, type: `com.pnfsoftware.jeb.core.units.code.asm.cfg.CFG<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default implementation does nothing and requests continuation.

## Method: augmentSimulationContext
- parameter: `decompiler`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.INativeDecompilerContext`
- parameter: `ctx`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IERoutineContext`
- parameter: `simulationContext`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IESimulationResults`
- parameter: `offset`, type: `long`
- parameter: `insn`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement`
- parameter: `state`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.EState`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default implementation does nothing and requests continuation.

## Method: collectCandidateMemoryDerefs
- parameter: `exp`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `defuse`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.EDefUseInfo`
- parameter: `isDef`, type: `boolean`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default implementation does nothing and requests continuation.

## Method: convertInstruction
- parameter: `converter`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IEConverter<?>`
- parameter: `ctx`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IERoutineContext`
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ConverterInstructionEntry<?>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default implementation does nothing and requests continuation.

## Method: convertToInlinedCall
- parameter: `converter`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IEConverter<?>`
- parameter: `ctx`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IERoutineContext`
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ConverterInstructionEntry<?>`
- parameter: `target`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default implementation does nothing and requests continuation.

## Method: customizeIntermediateOptimizer
- parameter: `decompiler`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.INativeDecompilerContext`
- parameter: `mo`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.opt.IEMasterOptimizer`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default implementation does nothing and requests continuation.

## Method: executePostPipelineStage
- parameter: `stage`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.NativeDecompilationStage`
- parameter: `target`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IDecompiledMethod`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<com.pnfsoftware.jeb.core.units.code.asm.decompiler.DecompilationStatus>`

Description: The default implementation returns [IN\_PROCESS](DecompilationStatus#IN_PROCESS) and requests continuation.

## Method: executePrePipelineStage
- parameter: `stage`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.NativeDecompilationStage`
- parameter: `target`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IDecompiledMethod`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<com.pnfsoftware.jeb.core.units.code.asm.decompiler.DecompilationStatus>`

Description: The default implementation returns [IN\_PROCESS](DecompilationStatus#IN_PROCESS) and requests continuation.

## Method: getName
- return type: `java.lang.String`

Description: Retrieve the extension name.
return: extension name

## Method: getPluginInformation
- return type: `com.pnfsoftware.jeb.core.EditablePluginInformation`


## Method: isMemoryResolutionAllowed
- parameter: `decompiler`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.INativeDecompilerContext`
- parameter: `ctx`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IERoutineContext`
- parameter: `mem`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEMem`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default implementation does nothing and requests continuation.

## Method: isOpaquePointerType
- parameter: `t`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IWildcardType`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<java.lang.Boolean>`

Description: The default implementation returns false and requests continuation.

## Method: resolveVariableArgumentInformation
- parameter: `ctx`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IERoutineContext`
- parameter: `cfg`, type: `com.pnfsoftware.jeb.core.units.code.asm.cfg.CFG<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`
- parameter: `iblk`, type: `int`
- parameter: `proto`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IWildcardPrototype`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.ChainedOperationResult<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.VariableArgumentInformation>`


## Protected Method: setName
- parameter: `name`, type: `java.lang.String`


