Package ghidra.pcode.emu.jit.var

# Class JitMemoryOutVar

java.lang.Object
ghidra.pcode.emu.jit.var.AbstractJitVal
ghidra.pcode.emu.jit.var.AbstractJitVar
ghidra.pcode.emu.jit.var.AbstractJitVarnodeVar
ghidra.pcode.emu.jit.var.AbstractJitOutVar
ghidra.pcode.emu.jit.var.JitMemoryOutVar

All Implemented Interfaces:
  `JitMemoryVar`, `JitOutVar`, `JitVal`, `JitVar`, `JitVarnodeVar`

public class JitMemoryOutVar extends AbstractJitOutVar implements JitMemoryVar
A p-code variable node with a fixed location in memory and a defining p-code op.

This represents an output operand located in memory. It can be addressed directly. In contrast to `JitLocalOutVar`, these may not be used by downstream p-code ops in the use-def graph, because the output is written to the `state` immediately. There's no benefit to further analysis. Instead, ops that use the same varnode will take a `JitDirectMemoryVar`, which indicate input immediately from the `state`.

See Also:
  - `JitDirectMemoryVar`

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from interface ghidra.pcode.emu.jit.var.JitVal

  `JitVal.ValUse`

- ## Field Summary

  ### Fields inherited from class ghidra.pcode.emu.jit.var.AbstractJitVarnodeVar

  `varnode`

  ### Fields inherited from class ghidra.pcode.emu.jit.var.AbstractJitVar

  `id`

  ### Fields inherited from class ghidra.pcode.emu.jit.var.AbstractJitVal

  `size, uses`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `JitMemoryOutVar(int id, Varnode varnode)`
  Construct a variable.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addUse(JitOp op, int position)`
  Add a use.

  ### Methods inherited from class ghidra.pcode.emu.jit.var.AbstractJitOutVar

  `definition, setDefinition`

  ### Methods inherited from class ghidra.pcode.emu.jit.var.AbstractJitVarnodeVar

  `space, toString, varnode`

  ### Methods inherited from class ghidra.pcode.emu.jit.var.AbstractJitVar

  `id`

  ### Methods inherited from class ghidra.pcode.emu.jit.var.AbstractJitVal

  `removeUse, size, uses`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface ghidra.pcode.emu.jit.var.JitVal

  `removeUse, uses`

  ### Methods inherited from interface ghidra.pcode.emu.jit.var.JitVar

  `id, space`

  ### Methods inherited from interface ghidra.pcode.emu.jit.var.JitVarnodeVar

  `size, varnode`

- ## Constructor Details

  - ### JitMemoryOutVar

    public JitMemoryOutVar(int id, Varnode varnode)
    Construct a variable.
    Parameters:
      `id` - the unique id
      `varnode` - the varnode
    See Also:
      - `JitDataFlowModel.generateOutVar(Varnode)`

- ## Method Details

  - ### addUse

    public void addUse(JitOp op, int position)
    Description copied from interface: `JitVal`
    Add a use.

    In most cases, uses should be final, once this value node has been entered into the use-def graph. An exception deals with `phi` nodes, as this analysis occurs after each intra-block portion of the graph has been constructed. During inter-block analysis, additional uses will get recorded. Even further uses may be recorded uding `op-use` analysis, since it may generate more `phi` nodes.

    Specified by:
      `addUse` in interface `JitVal`
    Overrides:
      `addUse` in class `AbstractJitVal`
    Parameters:
      `op` - the operator node using this one
      `position` - the position of this value in the operator's input operands