|
decompiler 1.0.0
|
Description of the indirect effect a sub-function has on a memory range. More...
#include <fspec.hh>
Public Types | |
| enum | { unaffected = 1 , killedbycall = 2 , return_address = 3 , unknown_effect = 4 } |
Public Member Functions | |
| EffectRecord (void) | |
| Constructor for use with decode() | |
| EffectRecord (const EffectRecord &op2) | |
| Copy constructor. | |
| EffectRecord (const Address &addr, int4 size) | |
| Construct a memory range with an unknown effect. More... | |
| EffectRecord (const ParamEntry &entry, uint4 t) | |
| Construct an effect on a parameter storage location. More... | |
| EffectRecord (const VarnodeData &addr, uint4 t) | |
| Construct an effect on a memory range. More... | |
| uint4 | getType (void) const |
| Get the type of effect. | |
| Address | getAddress (void) const |
| Get the starting address of the affected range. | |
| int4 | getSize (void) const |
| Get the size of the affected range. | |
| bool | operator== (const EffectRecord &op2) const |
| Equality operator. | |
| bool | operator!= (const EffectRecord &op2) const |
| Inequality operator. | |
| void | encode (Encoder &encoder) const |
| Encode the record to a stream. More... | |
| void | decode (uint4 grouptype, Decoder &decoder) |
| Decode the record from a stream. More... | |
Static Public Member Functions | |
| static bool | compareByAddress (const EffectRecord &op1, const EffectRecord &op2) |
| Compare two EffectRecords by their start Address. More... | |
Private Attributes | |
| VarnodeData | range |
| The memory range affected. | |
| uint4 | type |
| The type of effect. | |
Description of the indirect effect a sub-function has on a memory range.
This object applies only to the specific memory range, which is seen from the point of view of the calling function as a particular sub-function gets called. The main enumeration below lists the possible effects.
| anonymous enum |
| Enumerator | |
|---|---|
| unaffected | The sub-function does not change the value at all. |
| killedbycall | The memory is changed and is completely unrelated to its original value. |
| return_address | The memory is being used to store the return address. |
| unknown_effect | An unknown effect (indicates the absence of an EffectRecord) |
| EffectRecord::EffectRecord | ( | const Address & | addr, |
| int4 | size | ||
| ) |
Construct a memory range with an unknown effect.
The type is set to unknown_effect
| addr | is the start of the memory range |
| size | is the number of bytes in the memory range |
References Address::getOffset(), Address::getSpace(), VarnodeData::offset, range, VarnodeData::size, VarnodeData::space, type, and unknown_effect.
| EffectRecord::EffectRecord | ( | const ParamEntry & | entry, |
| uint4 | t | ||
| ) |
Construct an effect on a parameter storage location.
| entry | is a model of the parameter storage |
| t | is the effect type |
References ParamEntry::getBase(), ParamEntry::getSize(), ParamEntry::getSpace(), VarnodeData::offset, range, VarnodeData::size, VarnodeData::space, and type.
| EffectRecord::EffectRecord | ( | const VarnodeData & | data, |
| uint4 | t | ||
| ) |
|
inlinestatic |
Compare two EffectRecords by their start Address.
| op1 | is the first record to compare |
| op2 | is the other record to compare |
References AddrSpace::getIndex(), VarnodeData::offset, range, and VarnodeData::space.
Referenced by ProtoModel::decode(), FuncProto::decodeEffect(), ProtoModelMerged::intersectEffects(), ProtoModel::lookupEffect(), and ProtoModel::lookupRecord().
| void EffectRecord::decode | ( | uint4 | grouptype, |
| Decoder & | decoder | ||
| ) |
Decode the record from a stream.
Parse an <addr> element to get the memory range. The effect type is inherited from the parent.
| grouptype | is the effect inherited from the parent |
| decoder | is the stream decoder |
References VarnodeData::decode(), range, and type.
| void EffectRecord::encode | ( | Encoder & | encoder | ) | const |
Encode the record to a stream.
Encode just an <addr> element. The effect type is indicated by the parent element.
| encoder | is the stream encoder |
References Address::encode(), killedbycall, VarnodeData::offset, range, return_address, VarnodeData::size, VarnodeData::space, type, and unaffected.
Referenced by FuncProto::encodeEffect().