# Class: com.pnfsoftware.jeb.core.units.code.asm.decompiler.AbstractNativeDecompilerExtension
- Super class: `com.pnfsoftware.jeb.core.AbstractPlugin`
- Super interfaces: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.INativeDecompilerExtension`

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 (no-arg)

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 Final 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`


