pub struct DerivedOutput {
pub register: VarnodeId,
pub projection: Callee,
}Expand description
A register whose value on return is computed rather than carried in the return pack: the linked function is this function’s projection for that one output — a pure function of its inputs, returning what the register would have held.
Recording the projection is what lets the register leave both
outputs and, once nothing else reads it,
inputs without the fact being lost. The
motivating case is the stack pointer: every function “returns” SP + k,
which is a true statement about the machine code and no part of what the
function means. Leaving it in the pack put RSP in every signature; deleting
it outright would discard a real effect. A projection does neither.
The projection is an ordinary function and says what it reads through its own interface — this record deliberately does not restate the binding, so there is nothing here to desync from the function it names.
Entries are disjoint from outputs: a register is either packed or derived,
never both.
Fields§
§register: VarnodeIdThe register this projection computes.
projection: CalleeThe projection: a pure function whose return value is register’s value
on return from the parent.
Trait Implementations§
Source§impl Clone for DerivedOutput
impl Clone for DerivedOutput
Source§fn clone(&self) -> DerivedOutput
fn clone(&self) -> DerivedOutput
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more