public interface

IDImm

implements IDExpression
com.pnfsoftware.jeb.core.units.code.android.ir.IDImm

Class Overview

This dual-purpose dexdec IR element serves to encode immediate values (primitives and pooled strings) and evaluated values (primitives and objects).

They can be:
- primitives
- null objects
- pooled java.lang.String objects
- references to live objects (including arrays) living in an IR state

Examples:

 String s = a == 1 ? "hello": null;
                 ^   ^^^^^^^  ^^^^
 

Summary

[Expand]
Inherited Constants
From interface com.pnfsoftware.jeb.core.units.code.android.ir.IDElement
Public Methods
abstract IDImm _add(IDImm o)
Perform an integer addition.
abstract IDImm _and(IDImm o)
Perform a bitwise and operation.
abstract int _cmp(IDImm o)
Perform a signed operand comparison.
abstract int _cmpU(IDImm o)
Perform an unsigned operand comparison.
abstract IDImm _div(IDImm o)
Perform an integer division.
abstract boolean _isPowerOf2()
Determine whether this immediate (treated as an unsigned integer) is a power of 2.
abstract Integer _log2()
Perform an exact log2 on this immediate treated as an unsigned integer.
abstract IDImm _mul(IDImm o)
Perform an integer multiplication.
abstract IDImm _neg()
Perform an integer negation.
abstract IDImm _not()
Perform a bitwise not operation.
abstract IDImm _or(IDImm o)
Perform a bitwise or operation.
abstract IDImm _pow(int exponent)
Perform an exponentiation.
abstract IDImm _rem(IDImm o)
Perform an integer modulo operation.
abstract IDImm _sar(int cnt)
Perform an arithmetic right-shift operation (sign bit is maintained).
abstract IDImm _shl(int cnt)
Perform a left-shift operation.
abstract IDImm _shr(int cnt)
Perform a regular right-shift operation.
abstract IDImm _sub(IDImm o)
Perform an integer subtraction.
abstract boolean _testbit(int pos)
Test if a given bit is set.
abstract IDImm _xor(IDImm o)
Perform a bitwise xor operation.
abstract boolean canReadAsLong()
abstract IDImm duplicate()
Duplicate this element.
abstract IDImm duplicateWithDifferentType(IJavaType type)
Duplicate this immediate and assign it a different type.
abstract Object getImmediateAsJavaObject(IDGlobalContext gctx)
Resolve this primitive or pooled string immediate to a Java object: either the effective String value if it is a string, or one of boxed primitive object type if it is a primitive.
abstract int getObjectReferenceId()
Get the reference object id.
abstract long getRawValue()
Retrieve the raw value encoded by this immediate.
abstract int getStringIndex()
Retrieve the pool index of a pooled string immediate.
abstract String getStringValue(IDGlobalContext gctx)
Resolve the pooled string constant to its effective value.
abstract long getValueAsLong()
abstract boolean isNonNullRef()
Determine whether this immediate is a non-null reference.
abstract boolean isNullRef()
Determine whether this immediate is a null reference.
abstract boolean isOnes()
Determine whether this immediate has all its bits set to 1.
abstract boolean isRef()
Determine whether this immediate is a reference.
abstract boolean isString()
Determine whether this immediate is a pooled string.
abstract boolean isZero()
Determine whether this immediate has all its bits set to 0.
abstract boolean isZeroEquivalent()
Determine whether the immediate encodes zero (e.g.
abstract boolean maybeNonNullRef()
Determine whether this immediate may be a reference that is not the null reference.
abstract boolean maybeNullRef()
Determine whether this immediate may be a reference that is the null reference.
abstract boolean maybeRef()
Determine whether this immediate may be a reference.
abstract double toDouble()
Evaluate this immediate as a double-precision float.
abstract float toFloat()
Evaluate this immediate as a single-precision float.
abstract long toLong()
Evaluate this immediate as a signed long primitive.
abstract long toLong(boolean treatSregAsInt)
Evaluate this immediate as a signed long primitive.
abstract long toUnsignedLong()
Evaluate this immediate as an unsigned long.
[Expand]
Inherited Methods
From interface com.pnfsoftware.jeb.core.units.code.IInstructionOperand
From interface com.pnfsoftware.jeb.core.units.code.android.ir.IDElement
From interface com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression

Public Methods

public abstract IDImm _add (IDImm o)

Perform an integer addition.

public abstract IDImm _and (IDImm o)

Perform a bitwise and operation.

public abstract int _cmp (IDImm o)

Perform a signed operand comparison.

Returns
  • 0, 1, or -1

public abstract int _cmpU (IDImm o)

Perform an unsigned operand comparison.

Returns
  • 0, 1, or -1

public abstract IDImm _div (IDImm o)

Perform an integer division.

public abstract boolean _isPowerOf2 ()

Determine whether this immediate (treated as an unsigned integer) is a power of 2.

public abstract Integer _log2 ()

Perform an exact log2 on this immediate treated as an unsigned integer. If the immediate is not a power of 2, a null value is returned.

Returns
  • a non-null log2 of this immediate

public abstract IDImm _mul (IDImm o)

Perform an integer multiplication.

public abstract IDImm _neg ()

Perform an integer negation.

public abstract IDImm _not ()

Perform a bitwise not operation.

public abstract IDImm _or (IDImm o)

Perform a bitwise or operation.

public abstract IDImm _pow (int exponent)

Perform an exponentiation.

Parameters
exponent must be positive or zero

public abstract IDImm _rem (IDImm o)

Perform an integer modulo operation.

public abstract IDImm _sar (int cnt)

Perform an arithmetic right-shift operation (sign bit is maintained). The effective count is computed modulo-positive 32 or 64, depending on the type of this integer.

public abstract IDImm _shl (int cnt)

Perform a left-shift operation. The effective count is computed modulo-positive 32 or 64, depending on the type of this integer.

public abstract IDImm _shr (int cnt)

Perform a regular right-shift operation. The effective count is computed modulo-positive 32 or 64, depending on the type of this integer.

public abstract IDImm _sub (IDImm o)

Perform an integer subtraction.

public abstract boolean _testbit (int pos)

Test if a given bit is set.

Returns
  • true if set, false if unset

public abstract IDImm _xor (IDImm o)

Perform a bitwise xor operation.

public abstract boolean canReadAsLong ()

public abstract IDImm duplicate ()

Duplicate this element.

Returns
  • a deep copy of this element; the type of the duplicated element should be the same as this element's type

public abstract IDImm duplicateWithDifferentType (IJavaType type)

Duplicate this immediate and assign it a different type.

Parameters
type type of the duplicated immediate; note for String constants: although type update is allowed, it must be a type implementing java.lang.CharSequence
Returns
  • the duplicated immediate

public abstract Object getImmediateAsJavaObject (IDGlobalContext gctx)

Resolve this primitive or pooled string immediate to a Java object: either the effective String value if it is a string, or one of boxed primitive object type if it is a primitive.

public abstract int getObjectReferenceId ()

Get the reference object id. The value returned by this method is moot unless isRef() is true.

public abstract long getRawValue ()

Retrieve the raw value encoded by this immediate. All values (primitives, pool indices, object references) can fit on a long; hence this method's return type.

public abstract int getStringIndex ()

Retrieve the pool index of a pooled string immediate. This method will fail unless isString() is true.

public abstract String getStringValue (IDGlobalContext gctx)

Resolve the pooled string constant to its effective value. This method will throw if this immediate is not a string constant.

public abstract long getValueAsLong ()

public abstract boolean isNonNullRef ()

Determine whether this immediate is a non-null reference. Beware: if the immediate is not typed as an object, this method will return false in all case.

public abstract boolean isNullRef ()

Determine whether this immediate is a null reference. Beware: if the immediate is not typed as an object, this method will return false in all case.

public abstract boolean isOnes ()

Determine whether this immediate has all its bits set to 1.

Note: do not mix this up with a zero-value equality check. That works if the underlying value is to be interpreted as an 2-complement integer, but may not work if the imm is to be understood as an ieee754 float value, for example.

public abstract boolean isRef ()

Determine whether this immediate is a reference.

Note: pooled strings are not treated as references by this method.

public abstract boolean isString ()

Determine whether this immediate is a pooled string.

public abstract boolean isZero ()

Determine whether this immediate has all its bits set to 0.

Note: do not mix this up with a zero-value equality check. That works if the underlying value is to be interpreted as an 2-complement integer, but may not work if the imm is to be understood as an ieee754 float value, for example.

public abstract boolean isZeroEquivalent ()

Determine whether the immediate encodes zero (e.g. integer/float:0, boolean:false, ref:null). Same as isZero().

public abstract boolean maybeNonNullRef ()

Determine whether this immediate may be a reference that is not the null reference.

public abstract boolean maybeNullRef ()

Determine whether this immediate may be a reference that is the null reference.

public abstract boolean maybeRef ()

Determine whether this immediate may be a reference.

Note: pooled strings are not treated as references by this method.

public abstract double toDouble ()

Evaluate this immediate as a double-precision float. The immediate must be of type float or double.@return

public abstract float toFloat ()

Evaluate this immediate as a single-precision float. The immediate must be of type float.@return

public abstract long toLong ()

Evaluate this immediate as a signed long primitive.

Note: if this constant is an object reference, the reference id is returned.@return

public abstract long toLong (boolean treatSregAsInt)

Evaluate this immediate as a signed long primitive.

Note: if this constant is an object reference, the reference id is returned.@return

Parameters
treatSregAsInt if true, and if this object is typed as a single-slot wildcard, it is treated as a signed immediate (and sign-extension is applied)

public abstract long toUnsignedLong ()

Evaluate this immediate as an unsigned long.

Note: if this constant is an object reference, the reference id is returned.@return

Throws
DexDecEvaluationException the type of this immediate does not permit its resolution to a long primitive