decompiler  1.0.0
Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | Friends | List of all members
ghidra::Address Class Reference

A low-level machine address for labelling bytes and data. More...

#include <address.hh>

Public Types

enum  mach_extreme { m_minimal, m_maximal }
 An enum for specifying extremal addresses. More...
 

Public Member Functions

 Address (mach_extreme ex)
 Initialize an extremal address. More...
 
 Address (void)
 Create an invalid address. More...
 
 Address (AddrSpace *id, uintb off)
 Construct an address with a space/offset pair. More...
 
 Address (const Address &op2)
 A copy constructor. More...
 
bool isInvalid (void) const
 Is the address invalid? More...
 
int4 getAddrSize (void) const
 Get the number of bytes in the address. More...
 
bool isBigEndian (void) const
 Is data at this address big endian encoded. More...
 
void printRaw (ostream &s) const
 Write a raw version of the address to a stream. More...
 
int4 read (const string &s)
 Read in the address from a string. More...
 
AddrSpacegetSpace (void) const
 Get the address space. More...
 
uintb getOffset (void) const
 Get the address offset. More...
 
char getShortcut (void) const
 Get the shortcut character for the address space. More...
 
Addressoperator= (const Address &op2)
 Copy an address. More...
 
bool operator== (const Address &op2) const
 Compare two addresses for equality. More...
 
bool operator!= (const Address &op2) const
 Compare two addresses for inequality. More...
 
bool operator< (const Address &op2) const
 Compare two addresses via their natural ordering. More...
 
bool operator<= (const Address &op2) const
 Compare two addresses via their natural ordering. More...
 
Address operator+ (int8 off) const
 Increment address by a number of bytes. More...
 
Address operator- (int8 off) const
 Decrement address by a number of bytes. More...
 
bool containedBy (int4 sz, const Address &op2, int4 sz2) const
 Determine if op2 range contains this range. More...
 
int4 justifiedContain (int4 sz, const Address &op2, int4 sz2, bool forceleft) const
 Determine if op2 is the least significant part of this. More...
 
int4 overlap (int4 skip, const Address &op, int4 size) const
 Determine how this address falls in a given address range. More...
 
int4 overlapJoin (int4 skip, const Address &op, int4 size) const
 Determine how this falls in a possible join space address range. More...
 
bool isContiguous (int4 sz, const Address &loaddr, int4 losz) const
 Does this form a contiguous range with loaddr. More...
 
bool isConstant (void) const
 Is this a constant value. More...
 
void renormalize (int4 size)
 Make sure there is a backing JoinRecord if this is in the join space. More...
 
bool isJoin (void) const
 Is this a join value. More...
 
void encode (Encoder &encoder) const
 Encode this to a stream. More...
 
void encode (Encoder &encoder, int4 size) const
 Encode this and a size to a stream. More...
 

Static Public Member Functions

static Address decode (Decoder &decoder)
 Restore an address from parsed XML. More...
 
static Address decode (Decoder &decoder, int4 &size)
 Restore an address and size from parsed XML. More...
 

Protected Attributes

AddrSpacebase
 Pointer to our address space.
 
uintb offset
 Offset (in bytes)
 

Friends

ostream & operator<< (ostream &s, const Address &addr)
 Write out an address to stream. More...
 

Detailed Description

A low-level machine address for labelling bytes and data.

All data that can be manipulated within the processor reverse engineering model can be labelled with an Address. It is simply an address space (AddrSpace) and an offset within that space. Note that processor registers are typically modelled by creating a dedicated address space for them, as distinct from RAM say, and then specifying certain addresses within the register space that correspond to particular registers. However, an arbitrary address could refer to anything, RAM, ROM, cpu register, data segment, coprocessor, stack, nvram, etc. An Address represents an offset only, not an offset and length

Member Enumeration Documentation

◆ mach_extreme

An enum for specifying extremal addresses.

Enumerator
m_minimal 

Smallest possible address.

m_maximal 

Biggest possible address.

Constructor & Destructor Documentation

◆ Address() [1/4]

ghidra::Address::Address ( mach_extreme  ex)

Initialize an extremal address.

Some data structures sort on an Address, and it is convenient to be able to create an Address that is either bigger than or smaller than all other Addresses.

Parameters
exis either m_minimal or m_maximal

◆ Address() [2/4]

ghidra::Address::Address ( void  )
inline

Create an invalid address.

An invalid address is possible in some circumstances. This deliberately constructs an invalid address

References base.

Referenced by ghidra::Range::getFirstAddr(), ghidra::Range::getLastAddr(), operator+(), and operator-().

◆ Address() [3/4]

ghidra::Address::Address ( AddrSpace id,
uintb  off 
)
inline

Construct an address with a space/offset pair.

This is the basic Address constructor

Parameters
idis the space containing the address
offis the offset of the address

References base, and offset.

◆ Address() [4/4]

ghidra::Address::Address ( const Address op2)
inline

A copy constructor.

This is a standard copy constructor, copying the address space and the offset

Parameters
op2is the Address to copy

References base, and offset.

Member Function Documentation

◆ containedBy()

bool ghidra::Address::containedBy ( int4  sz,
const Address op2,
int4  sz2 
) const

Determine if op2 range contains this range.

Return true if the range starting at this extending the given number of bytes is contained by the second given range.

Parameters
szis the given number of bytes in this range
op2is the start of the second given range
sz2is the number of bytes in the second given range
Returns
true if the second given range contains this range

References base, and offset.

Referenced by ghidra::FuncProto::characterizeAsInputParam(), ghidra::FuncProto::characterizeAsOutput(), ghidra::FuncProto::getBiggestContainedInputParam(), and ghidra::FuncProto::getBiggestContainedOutput().

◆ decode() [1/2]

Address ghidra::Address::decode ( Decoder decoder)
static

◆ decode() [2/2]

Address ghidra::Address::decode ( Decoder decoder,
int4 &  size 
)
static

Restore an address and size from parsed XML.

This is usually used to decode an address from an <addr> element, but any element can be used if it has the appropriate attributes

  • space indicates the address space of the tag
  • offset indicates the offset within the space
  • size indicates the size of an address range

or a name attribute can be used to recover an address and size based on a register name. If a size is recovered it is stored in size reference.

Parameters
decoderis the stream decoder
sizeis the reference to any recovered size
Returns
the resulting Address

References ghidra::VarnodeData::decode(), ghidra::VarnodeData::offset, ghidra::VarnodeData::size, and ghidra::VarnodeData::space.

◆ encode() [1/2]

void ghidra::Address::encode ( Encoder encoder) const
inline

◆ encode() [2/2]

void ghidra::Address::encode ( Encoder encoder,
int4  size 
) const
inline

Encode this and a size to a stream.

Encode an <addr> element corresponding to this address to a stream. The tag will also include an extra size attribute so that it can describe an entire memory range.

Parameters
encoderis the stream encoder
sizeis the number of bytes in the range

References base, ghidra::Encoder::closeElement(), ghidra::AddrSpace::encodeAttributes(), offset, and ghidra::Encoder::openElement().

◆ getAddrSize()

int4 ghidra::Address::getAddrSize ( void  ) const
inline

Get the number of bytes in the address.

Get the number of bytes needed to encode the offset for this address.

Returns
the number of bytes in the encoding

References base, and ghidra::AddrSpace::getAddrSize().

Referenced by ghidra::ScopeLocal::buildVariableName(), ghidra::ScopeInternal::buildVariableName(), ghidra::IfcAddrrangeLoad::execute(), ghidra::ToOpEdge::hash(), ghidra::Heritage::normalizeReadSize(), ghidra::Heritage::normalizeWriteSize(), and ghidra::Funcdata::spacebaseConstant().

◆ getOffset()

uintb ghidra::Address::getOffset ( void  ) const
inline

Get the address offset.

Get the offset of the address as an integer.

Returns
the offset integer

References offset.

Referenced by ghidra::Scope::addDynamicSymbol(), ghidra::Scope::addEquateSymbol(), ghidra::Scope::addMap(), ghidra::ScopeInternal::addMapInternal(), ghidra::Scope::addMapPoint(), ghidra::Scope::addUnionFacetSymbol(), ghidra::ScopeLocal::adjustFit(), ghidra::Funcdata::adjustInputVarnodes(), ghidra::ActionShadowVar::apply(), ghidra::ActionRestrictLocal::apply(), ghidra::ParamEntry::assumedExtension(), ghidra::ActionInferTypes::buildLocaltypes(), ghidra::FuncCallSpecs::buildParam(), ghidra::Heritage::buildRefinement(), ghidra::ArchitectureGhidra::buildSymbols(), ghidra::SleighArchitecture::buildSymbols(), ghidra::ScopeLocal::buildVariableName(), ghidra::ScopeInternal::buildVariableName(), ghidra::ParamListStandard::characterizeAsParam(), ghidra::Varnode::characterizeOverlap(), ghidra::Funcdata::checkForLanedRegister(), ghidra::ParamListStandard::checkJoin(), ghidra::Heritage::collect(), ghidra::Varnode::constantMatch(), ghidra::AddrSpaceManager::constructFloatExtensionAddress(), ghidra::AddrSpaceManager::constructJoinAddress(), ghidra::ParamEntry::containedBy(), ghidra::Range::contains(), ghidra::Varnode::contains(), ghidra::Funcdata::coverVarnodes(), ghidra::ParamEntry::decode(), ghidra::SegmentOp::decode(), ghidra::ScopeGhidra::dump2Cache(), ghidra::EffectRecord::EffectRecord(), ghidra::PrintC::emitLabel(), ghidra::PrintLanguage::emitLineComment(), ghidra::Comment::encode(), ghidra::SeqNum::encode(), ghidra::Varnode::encode(), ghidra::JumpBasicOverride::encode(), ghidra::Database::encode(), ghidra::FspecSpace::encodeAttributes(), ghidra::ContextInternal::encodeContext(), ghidra::ContextDatabase::encodeTracked(), ghidra::VarnodeBank::endLoc(), ghidra::SymbolEntry::EntrySubsort::EntrySubsort(), ghidra::IfcMapunionfacet::execute(), ghidra::IfcPrintdisasm::execute(), ghidra::IfcGlobalAdd::execute(), ghidra::IfcGlobalRemove::execute(), ghidra::IfcVolatile::execute(), ghidra::IfcReadonly::execute(), ghidra::IfcPreferSplit::execute(), ghidra::EmulatePcodeCache::executeBranch(), ghidra::ScopeLocal::fakeInputSymbols(), ghidra::ScopeInternal::findAddr(), ghidra::ScopeInternal::findClosestFit(), ghidra::ScopeInternal::findCodeLabel(), ghidra::ScopeGhidra::findContainer(), ghidra::ScopeInternal::findContainer(), ghidra::VarnodeBank::findCoveredInput(), ghidra::VarnodeBank::findCoveringInput(), ghidra::Funcdata::findDisjointCover(), ghidra::ParamListStandard::findEntry(), ghidra::ScopeInternal::findExternalRef(), ghidra::ScopeInternal::findFunction(), ghidra::ScopeInternal::findOverlap(), ghidra::Funcdata::Funcdata(), ghidra::ActionFuncLink::funcLinkInput(), ghidra::FuncProto::getBiggestContainedInputParam(), ghidra::FuncProto::getBiggestContainedOutput(), ghidra::ParamListStandard::getBiggestContainedParam(), ghidra::ParamEntry::getContainer(), ghidra::ContextInternal::getContext(), ghidra::ContextCache::getContext(), ghidra::SymbolEntry::getFirst(), ghidra::FuncCallSpecs::getFspecFromConst(), ghidra::SymbolEntry::getLast(), ghidra::Symbol::getMapEntry(), ghidra::Varnode::getOffset(), ghidra::PcodeOp::getOpFromConst(), ghidra::DisassemblyCache::getParserContext(), ghidra::FlowInfo::getSize(), ghidra::SymbolEntry::getSizedType(), ghidra::ParamEntry::getSlot(), ghidra::Architecture::getSpaceBySpacebase(), ghidra::TypeSpacebase::getSubType(), ghidra::Heritage::guardCallOverlappingInput(), ghidra::Heritage::guardCallOverlappingOutput(), ghidra::Heritage::guardCalls(), ghidra::Heritage::guardInput(), ghidra::Heritage::guardLoads(), ghidra::Heritage::guardReturnsOverlapping(), ghidra::FuncCallSpecs::hasEffectTranslate(), ghidra::ToOpEdge::hash(), ghidra::RangeList::inRange(), ghidra::ParamEntry::intersects(), ghidra::Varnode::intersects(), ghidra::LoadGuard::isGuarded(), ghidra::ParamEntry::justifiedContain(), ghidra::Funcdata::linkSymbolReference(), ghidra::RawLoadImage::loadFill(), ghidra::RangeList::longestFit(), ghidra::Funcdata::mapGlobals(), ghidra::ScopeLocal::markUnaliased(), ghidra::TypeSpacebase::nearestArrayedComponentForward(), ghidra::Sleigh::oneInstruction(), overlapJoin(), ghidra::JoinSpace::overlapJoin(), ghidra::LoadImageXml::pad(), ghidra::Varnode::printRawNoMarkup(), ghidra::ActionInferTypes::propagateRef(), ghidra::ScopeLocal::remapSymbol(), ghidra::ScopeLocal::remapSymbolDynamic(), ghidra::AddrSpaceManager::renormalizeJoinAddress(), ghidra::FuncProto::resolveExtraPop(), ghidra::FuncCallSpecs::resolveSpacebaseRelative(), ghidra::JumpBasic::sanityCheck(), ghidra::JumpTable::sanityCheck(), ghidra::ContextCache::setContext(), ghidra::BlockBasic::setInitialRange(), ghidra::SleighBuilder::setUniqueOffset(), ghidra::Funcdata::spacebaseConstant(), ghidra::Heritage::splitByRefinement(), ghidra::Heritage::splitPieces(), ghidra::FuncProto::unjustifiedInputParam(), and ghidra::Varnode::Varnode().

◆ getShortcut()

char ghidra::Address::getShortcut ( void  ) const
inline

Get the shortcut character for the address space.

Each address has a shortcut character associated with it for use with the read and printRaw methods.

Returns
the shortcut char

References base, and ghidra::AddrSpace::getShortcut().

Referenced by ghidra::PrintC::emitLabel(), ghidra::ArchitectureGhidra::getBytes(), ghidra::FlowInfo::handleOutOfBounds(), ghidra::RawLoadImage::loadFill(), ghidra::GhidraTranslate::oneInstruction(), ghidra::SymbolEntry::printEntry(), ghidra::IopSpace::printRaw(), ghidra::Varnode::printRawNoMarkup(), and ghidra::VarnodeBank::setDef().

◆ getSpace()

AddrSpace * ghidra::Address::getSpace ( void  ) const
inline

Get the address space.

Get the address space associated with this address.

Returns
the AddressSpace pointer, or NULL if invalid

References base.

Referenced by ghidra::Scope::addDynamicSymbol(), ghidra::Scope::addEquateSymbol(), ghidra::ScopeGhidraNamespace::addMapInternal(), ghidra::ScopeInternal::addMapInternal(), ghidra::Scope::addMapPoint(), ghidra::Scope::addUnionFacetSymbol(), ghidra::ActionDeindirect::apply(), ghidra::ActionRestrictLocal::apply(), ghidra::RulePiecePathology::applyOp(), ghidra::ActionMarkExplicit::baseExplicit(), ghidra::JumpBasic::buildAddresses(), ghidra::JumpAssisted::buildAddresses(), ghidra::FuncCallSpecs::buildParam(), ghidra::ArchitectureGhidra::buildSymbols(), ghidra::SleighArchitecture::buildSymbols(), ghidra::ScopeLocal::buildVariableName(), ghidra::ScopeInternal::buildVariableName(), ghidra::ParamListStandard::characterizeAsParam(), ghidra::Varnode::characterizeOverlap(), ghidra::Funcdata::checkForLanedRegister(), ghidra::Heritage::collect(), ghidra::FuncCallSpecs::commitNewInputs(), ghidra::FuncCallSpecs::commitNewOutputs(), ghidra::AddrSpaceManager::constructFloatExtensionAddress(), ghidra::AddrSpaceManager::constructJoinAddress(), ghidra::ParamEntry::containedBy(), ghidra::Range::contains(), ghidra::Varnode::contains(), ghidra::ParamEntry::decode(), ghidra::SegmentOp::decode(), ghidra::ScopeInternal::decode(), ghidra::ScopeGhidra::dump2Cache(), ghidra::EffectRecord::EffectRecord(), ghidra::PrintC::emitLabel(), ghidra::PrintLanguage::emitLineComment(), ghidra::Comment::encode(), ghidra::SeqNum::encode(), ghidra::Varnode::encode(), ghidra::JumpBasicOverride::encode(), ghidra::Database::encode(), ghidra::FspecSpace::encodeAttributes(), ghidra::ContextInternal::encodeContext(), ghidra::ContextDatabase::encodeTracked(), ghidra::VarnodeBank::endLoc(), ghidra::SymbolEntry::EntrySubsort::EntrySubsort(), ghidra::IfcMapaddress::execute(), ghidra::IfcGlobalAdd::execute(), ghidra::IfcGlobalRemove::execute(), ghidra::IfcVolatile::execute(), ghidra::IfcReadonly::execute(), ghidra::IfcPreferSplit::execute(), ghidra::ScopeLocal::fakeInputSymbols(), ghidra::ScopeInternal::findAddr(), ghidra::ScopeInternal::findClosestFit(), ghidra::ScopeInternal::findCodeLabel(), ghidra::ScopeInternal::findContainer(), ghidra::VarnodeBank::findCoveredInput(), ghidra::VarnodeBank::findCoveringInput(), ghidra::ParamListStandard::findEntry(), ghidra::ScopeInternal::findExternalRef(), ghidra::ScopeInternal::findFunction(), ghidra::ScopeInternal::findOverlap(), ghidra::FlowInfo::findRelTarget(), ghidra::PieceNode::findRoot(), ghidra::IfaceDecompData::followFlow(), ghidra::FuncCallSpecs::FuncCallSpecs(), ghidra::ActionFuncLink::funcLinkInput(), ghidra::FuncProto::getBiggestContainedInputParam(), ghidra::FuncProto::getBiggestContainedOutput(), ghidra::ParamListStandard::getBiggestContainedParam(), ghidra::ContextInternal::getContext(), ghidra::ContextCache::getContext(), ghidra::TypeOpCallind::getInputLocal(), ghidra::TypeOpIndirect::getInputLocal(), ghidra::Symbol::getMapEntry(), ghidra::Varnode::getSpace(), ghidra::Architecture::getSpaceBySpacebase(), ghidra::Heritage::guardCalls(), ghidra::Heritage::guardInput(), ghidra::Heritage::guardLoads(), ghidra::Heritage::guardStores(), ghidra::FuncCallSpecs::hasEffectTranslate(), ghidra::Architecture::highPtrPossible(), ghidra::Funcdata::inlineFlow(), ghidra::RangeList::inRange(), ghidra::ParamEntry::intersects(), ghidra::Varnode::intersects(), ghidra::LoadGuard::isGuarded(), ghidra::ParamEntry::justifiedContain(), ghidra::RangeList::longestFit(), ghidra::ProtoModel::lookupEffect(), overlapJoin(), ghidra::JoinSpace::overlapJoin(), ghidra::LoadImageXml::pad(), ghidra::Heritage::placeMultiequals(), ghidra::Varnode::printRawNoMarkup(), ghidra::ActionInferTypes::propagateRef(), ghidra::PrintC::pushPartialSymbol(), ghidra::PrintC::pushUnnamedLocation(), ghidra::IfaceDecompData::readVarnode(), ghidra::ParamActive::registerTrial(), ghidra::FlowInfo::reinterpreted(), ghidra::ScopeLocal::remapSymbol(), ghidra::ScopeLocal::remapSymbolDynamic(), ghidra::ScopeGhidra::removeQuery(), ghidra::Heritage::removeRevisitedMarkers(), ghidra::Funcdata::removeUnreachableBlocks(), ghidra::FuncCallSpecs::resolveSpacebaseRelative(), ghidra::ContextCache::setContext(), ghidra::EmulateFunction::setExecuteAddress(), ghidra::BlockBasic::setInitialRange(), ghidra::Funcdata::spacebaseConstant(), ghidra::Heritage::splitByRefinement(), ghidra::Funcdata::startProcessing(), ghidra::FlowInfo::target(), ghidra::FuncCallSpecs::transferLockedInputParam(), ghidra::JumpBasicOverride::trialNorm(), ghidra::FuncProto::unjustifiedInputParam(), and ghidra::Varnode::Varnode().

◆ isBigEndian()

bool ghidra::Address::isBigEndian ( void  ) const
inline

◆ isConstant()

bool ghidra::Address::isConstant ( void  ) const
inline

Is this a constant value.

Determine if this address is from the constant space. All constant values are represented as an offset into the constant space.

Returns
true if this address represents a constant

References base, ghidra::AddrSpace::getType(), and ghidra::IPTR_CONSTANT.

Referenced by ghidra::Scope::discoverScope(), ghidra::Scope::stackAddr(), ghidra::Scope::stackClosestFit(), ghidra::Scope::stackCodeLabel(), ghidra::Scope::stackContainer(), ghidra::Scope::stackExternalRef(), and ghidra::Scope::stackFunction().

◆ isContiguous()

bool ghidra::Address::isContiguous ( int4  sz,
const Address loaddr,
int4  losz 
) const

Does this form a contiguous range with loaddr.

Does the location this, sz form a contiguous region to loaddr, losz, where this forms the most significant piece of the logical whole

Parameters
szis the size of this hi region
loaddris the starting address of the low region
loszis the size of the low region
Returns
true if the pieces form a contiguous whole

References base, and offset.

Referenced by ghidra::ParamListStandard::checkJoin(), and ghidra::AddrSpaceManager::constructJoinAddress().

◆ isInvalid()

bool ghidra::Address::isInvalid ( void  ) const
inline

Is the address invalid?

Determine if this is an invalid address. This only detects deliberate invalid addresses.

Returns
true if the address is invalid

References base.

Referenced by ghidra::Scope::addDynamicSymbol(), ghidra::Scope::addEquateSymbol(), ghidra::Scope::addMap(), ghidra::Scope::addMapPoint(), ghidra::Scope::addUnionFacetSymbol(), ghidra::ParamListStandard::assignAddress(), ghidra::Scope::buildDefaultName(), ghidra::SleighArchitecture::buildSymbols(), ghidra::Database::clearPropertyRange(), ghidra::FuncCallSpecs::countMatchingCalls(), ghidra::FuncProto::decode(), ghidra::ContextInternal::decodeContext(), ghidra::ScopeGhidra::dump2Cache(), ghidra::SymbolEntry::encode(), ghidra::FspecSpace::encodeAttributes(), ghidra::IfcSetcontextrange::execute(), ghidra::IfcSettrackedrange::execute(), ghidra::ScopeInternal::findAddr(), ghidra::ScopeInternal::findClosestFit(), ghidra::ScopeInternal::findContainer(), ghidra::Funcdata::findLinkedVarnode(), ghidra::ContextInternal::getRegionForSet(), ghidra::FlowInfo::inlineClone(), ghidra::RangeList::inRange(), ghidra::SymbolEntry::inUse(), ghidra::SymbolEntry::isDynamic(), ghidra::SymbolEntry::isInvalid(), ghidra::ActionConstantPtr::isPointer(), ghidra::Funcdata::linkSymbolReference(), ghidra::RangeList::longestFit(), ghidra::SymbolEntry::printEntry(), ghidra::PrintC::pushPtrCharConstant(), ghidra::FlowInfo::queryCall(), ghidra::IfaceDecompData::readVarnode(), ghidra::ScopeLocal::remapSymbol(), ghidra::ScopeLocal::remapSymbolDynamic(), ghidra::AddrSpaceManager::renormalizeJoinAddress(), ghidra::Database::setPropertyRange(), ghidra::FlowInfo::setupCallindSpecs(), and ghidra::FlowInfo::target().

◆ isJoin()

bool ghidra::Address::isJoin ( void  ) const
inline

Is this a join value.

Determine if this address represents a set of joined memory locations.

Returns
true if this address represents a join

References base, ghidra::AddrSpace::getType(), and ghidra::IPTR_JOIN.

Referenced by ghidra::Scope::addMap(), and ghidra::RulePullsubMulti::buildSubpiece().

◆ justifiedContain()

int4 ghidra::Address::justifiedContain ( int4  sz,
const Address op2,
int4  sz2,
bool  forceleft 
) const

Determine if op2 is the least significant part of this.

Return -1 if (op2,sz2) is not properly contained in (this,sz). If it is contained, return the endian aware offset of (op2,sz2) I.e. if the least significant byte of the op2 range falls on the least significant byte of the this range, return 0. If it intersects the second least significant, return 1, etc. The -forceleft- toggle causes the check to be made against the left (lowest address) side of the container, regardless of the endianness. I.e. it forces a little endian interpretation.

Parameters
szis the size of this range
op2is the address of the second range
sz2is the size of the second range
forceleftis true if containments is forced to be on the left even for big endian
Returns
the endian aware offset, or -1

References base, and offset.

Referenced by ghidra::Funcdata::adjustInputVarnodes(), ghidra::FuncProto::characterizeAsInputParam(), ghidra::FuncProto::characterizeAsOutput(), ghidra::Heritage::guardCallOverlappingInput(), ghidra::ParamEntry::justifiedContain(), ghidra::FuncProto::possibleInputParam(), ghidra::FuncProto::possibleOutputParam(), ghidra::FuncCallSpecs::transferLockedOutputParam(), and ghidra::FuncProto::unjustifiedInputParam().

◆ operator!=()

bool ghidra::Address::operator!= ( const Address op2) const
inline

Compare two addresses for inequality.

Check if two addresses are not equal. I.e. if either their address space or offset are different.

Parameters
op2is the address to compare to this
Returns
true if the addresses are different

◆ operator+()

Address ghidra::Address::operator+ ( int8  off) const
inline

Increment address by a number of bytes.

Add an integer value to the offset portion of the address. The addition takes into account the size of the address space, and the Address will wrap around if necessary.

Parameters
offis the number to add to the offset
Returns
the new incremented address

References Address(), base, offset, and ghidra::AddrSpace::wrapOffset().

◆ operator-()

Address ghidra::Address::operator- ( int8  off) const
inline

Decrement address by a number of bytes.

Subtract an integer value from the offset portion of the address. The subtraction takes into account the size of the address space, and the Address will wrap around if necessary.

Parameters
offis the number to subtract from the offset
Returns
the new decremented address

References Address(), base, offset, and ghidra::AddrSpace::wrapOffset().

◆ operator<()

bool ghidra::Address::operator< ( const Address op2) const
inline

Compare two addresses via their natural ordering.

Do an ordering comparison of two addresses. Addresses are sorted first on space, then on offset. So two addresses in the same space compare naturally based on their offset, but addresses in different spaces also compare. Different spaces are ordered by their index.

Parameters
op2is the address to compare to
Returns
true if this comes before op2

References base, ghidra::AddrSpace::getIndex(), and offset.

◆ operator<=()

bool ghidra::Address::operator<= ( const Address op2) const
inline

Compare two addresses via their natural ordering.

Do an ordering comparison of two addresses.

Parameters
op2is the address to compare to
Returns
true if this comes before or is equal to op2

References base, ghidra::AddrSpace::getIndex(), and offset.

◆ operator=()

Address & ghidra::Address::operator= ( const Address op2)
inline

Copy an address.

This is a standard assignment operator, copying the address space pointer and the offset

Parameters
op2is the Address being assigned
Returns
a reference to altered address

References base, and offset.

◆ operator==()

bool ghidra::Address::operator== ( const Address op2) const
inline

Compare two addresses for equality.

Check if two addresses are equal. I.e. if their address space and offset are the same.

Parameters
op2is the address to compare to this
Returns
true if the addresses are the same

References base, and offset.

◆ overlap()

int4 ghidra::Address::overlap ( int4  skip,
const Address op,
int4  size 
) const

Determine how this address falls in a given address range.

If this + skip falls in the range op to op + size, then a non-negative integer is returned indicating where in the interval it falls. I.e. if this + skip == op, then 0 is returned. Otherwise -1 is returned.

Parameters
skipis an adjust to this address
opis the start of the range to check
sizeis the size of the range
Returns
an integer indicating how overlap occurs

References base, ghidra::IPTR_CONSTANT, and offset.

Referenced by ghidra::LocationMap::add(), ghidra::RulePieceStructure::determineDatatype(), ghidra::LocationMap::find(), ghidra::LocationMap::findPass(), ghidra::ParamEntry::getContainer(), ghidra::LoadImageXml::loadFill(), ghidra::ProtoModel::lookupEffect(), ghidra::ProtoModel::lookupRecord(), and ghidra::ParamActive::whichTrial().

◆ overlapJoin()

int4 ghidra::Address::overlapJoin ( int4  skip,
const Address op,
int4  size 
) const
inline

Determine how this falls in a possible join space address range.

This method is equivalent to Address::overlap, but a range in the join space can be considered overlapped with its constituent pieces. If this + skip falls in the range, op to op + size, then a non-negative integer is returned indicating where in the interval it falls. Otherwise -1 is returned.

Parameters
skipis an adjust to this address
opis the start of the range to check
sizeis the size of the range
Returns
an integer indicating how overlap occurs

References base, getOffset(), getSpace(), offset, and ghidra::AddrSpace::overlapJoin().

Referenced by ghidra::HighVariable::setSymbol().

◆ printRaw()

void ghidra::Address::printRaw ( ostream &  s) const
inline

◆ read()

int4 ghidra::Address::read ( const string &  s)
inline

Read in the address from a string.

Convert a string into an address. The string format can be tailored for the particular address space.

Parameters
sis the string to parse
Returns
any size associated with the parsed string

References base, offset, and ghidra::AddrSpace::read().

◆ renormalize()

void ghidra::Address::renormalize ( int4  size)

Make sure there is a backing JoinRecord if this is in the join space.

If this is (originally) a join address, reevaluate it in terms of its new offset and size, changing the space and offset if necessary.

Parameters
sizeis the new size in bytes of the underlying object

References ghidra::IPTR_JOIN.

Referenced by ghidra::RulePullsubMulti::applyOp(), ghidra::RuleLeftRight::applyOp(), ghidra::RulePieceStructure::applyOp(), ghidra::SplitDatatype::buildInSubpieces(), ghidra::SplitDatatype::buildOutConcats(), ghidra::SplitDatatype::buildOutVarnodes(), ghidra::RulePullsubMulti::buildSubpiece(), ghidra::TransformVar::createReplacement(), ghidra::PieceNode::findRoot(), ghidra::SubvariableFlow::getReplacementAddress(), and ghidra::RulePtrFlow::truncatePointer().

Friends And Related Function Documentation

◆ operator<<

ostream& operator<< ( ostream &  s,
const Address addr 
)
friend

Write out an address to stream.

This allows an Address to be written to a stream using the standard '<<' operator. This is a wrapper for the printRaw method and is intended for debugging and console mode uses.

Parameters
sis the stream being written to
addris the Address to write
Returns
the output stream

Referenced by ghidra::SeqNum::operator<().


The documentation for this class was generated from the following files: