pub struct Term<T> {
    pub tid: Tid,
    pub term: T,
}
Expand description

A term is an object inside a binary with an address and an unique ID (both contained in the tid).

Fields§

§tid: Tid

The term identifier, which also contains the address of the term

§term: T

The object

Implementations§

source§

impl Term<Def>

source

pub fn check_for_zero_extension( &self, output_name: String, output_sub_register: String ) -> Option<Tid>

This function checks whether the instruction is a zero extension of the overwritten sub register of the previous instruction. If so, returns its TID

source

pub fn substitute_input_var( &mut self, input_var: &Variable, replace_with_expression: &Expression )

Substitute every occurence of input_var in the address and value expressions with replace_with_expression. Does not change the target variable of assignment- and load-instructions.

source§

impl Term<Blk>

source

pub fn remove_nonexisting_indirect_jump_targets( &mut self, all_jump_targets: &HashSet<Tid> ) -> Result<(), Vec<LogMessage>>

Remove indirect jump target addresses for which no corresponding target block exists.

Returns an error message for each removed address.

source

pub fn artificial_sink(id_suffix: &str) -> Self

Returns a new artificial sink block with the given suffix attached to its ID.

source§

impl Term<Sub>

source

pub fn id_suffix(&self) -> String

Returns the ID suffix for this function.

source

pub fn has_artifical_sink(&self) -> bool

Returns true iff the function has an artificial sink block.

source

pub fn artificial_sink() -> Self

Returns a new artificial sink sub.

source

pub fn add_artifical_sink(&mut self) -> bool

Adds an artificial sink block if there is none.

Returns true iff the artificial sink block was added.

source§

impl Term<Sub>

source

pub fn into_ir_sub_term(self, generic_pointer_size: ByteSize) -> Term<IrSub>

Convert a Sub term in the P-Code representation to a Sub term in the intermediate representation. The conversion also repairs the order of the basic blocks in the blocks array of the Sub in the sense that the first block of the array is required to also be the function entry point after the conversion.

Trait Implementations§

source§

impl<T: Clone> Clone for Term<T>

source§

fn clone(&self) -> Term<T>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Debug> Debug for Term<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, T> Deserialize<'de> for Term<T>
where T: Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<T: Hash> Hash for Term<T>

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T: PartialEq> PartialEq for Term<T>

source§

fn eq(&self, other: &Term<T>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T> Serialize for Term<T>
where T: Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<T: Eq> Eq for Term<T>

source§

impl<T> StructuralEq for Term<T>

source§

impl<T> StructuralPartialEq for Term<T>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for Term<T>
where T: RefUnwindSafe,

§

impl<T> Send for Term<T>
where T: Send,

§

impl<T> Sync for Term<T>
where T: Sync,

§

impl<T> Unpin for Term<T>
where T: Unpin,

§

impl<T> UnwindSafe for Term<T>
where T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,