Ghidra Decompiler Analysis Engine
Public Member Functions | List of all members
RangeList Class Reference

A disjoint set of Ranges, possibly across multiple address spaces. More...

#include <address.hh>

Public Member Functions

const RangegetFirstRange (void) const
 Get the first Range. More...
 
const RangegetLastRange (void) const
 Get the last Range. More...
 
const RangegetLastSignedRange (AddrSpace *spaceid) const
 Get the last Range viewing offsets as signed. More...
 
const RangegetRange (AddrSpace *spaceid, uintb offset) const
 Get Range containing the given byte. More...
 
void insertRange (AddrSpace *spc, uintb first, uintb last)
 Insert a range of addresses. More...
 
void removeRange (AddrSpace *spc, uintb first, uintb last)
 Remove a range of addresses. More...
 
void merge (const RangeList &op2)
 Merge another RangeList into this.
 
bool inRange (const Address &addr, int4 size) const
 Check containment an address range. More...
 
uintb longestFit (const Address &addr, uintb maxsize) const
 Find size of biggest Range containing given address. More...
 
void printBounds (ostream &s) const
 Print a description of this RangeList to stream. More...
 
void saveXml (ostream &s) const
 Write this RangeList to an XML stream. More...
 
void restoreXml (const Element *el, const AddrSpaceManager *manage)
 Restore this RangeList from an XML stream. More...
 

Detailed Description

A disjoint set of Ranges, possibly across multiple address spaces.

This is a container for addresses. It maintains a disjoint list of Ranges that cover all the addresses in the container. Ranges can be inserted and removed, but overlapping/adjacent ranges will get merged.

Member Function Documentation

◆ getFirstRange()

const Range * RangeList::getFirstRange ( void  ) const

Get the first Range.

Returns
the first contiguous range of addresses or NULL if empty

◆ getLastRange()

const Range * RangeList::getLastRange ( void  ) const

Get the last Range.

Returns
the last contiguous range of addresses or NULL if empty

◆ getLastSignedRange()

const Range * RangeList::getLastSignedRange ( AddrSpace spaceid) const

Get the last Range viewing offsets as signed.

Treating offsets with their high-bits set as coming before offset where the high-bit is clear, return the last/latest contiguous Range within the given address space

Parameters
spaceidis the given address space
Returns
indicated Range or NULL if empty

◆ getRange()

const Range * RangeList::getRange ( AddrSpace spaceid,
uintb  offset 
) const

Get Range containing the given byte.

If this RangeList contains the specific address (spaceid,offset), return it

Returns
the containing Range or NULL

◆ inRange()

bool RangeList::inRange ( const Address addr,
int4  size 
) const

Check containment an address range.

Make sure indicated range of addresses is contained in this RangeList

Parameters
addris the first Address in the target range
sizeis the number of bytes in the target range
Returns
true is the range is fully contained by this RangeList

◆ insertRange()

void RangeList::insertRange ( AddrSpace spc,
uintb  first,
uintb  last 
)

Insert a range of addresses.

Insert a new Range merging as appropriate to maintain the disjoint cover

Parameters
spcis the address space containing the new range
firstis the offset of the first byte in the new range
lastis the offset of the last byte in the new range

◆ longestFit()

uintb RangeList::longestFit ( const Address addr,
uintb  maxsize 
) const

Find size of biggest Range containing given address.

Return the size of the biggest contiguous sequence of addresses in this RangeList which contain the given address

Parameters
addris the given address
maxsizeis the large range to consider before giving up
Returns
the size (in bytes) of the biggest range

◆ printBounds()

void RangeList::printBounds ( ostream &  s) const

Print a description of this RangeList to stream.

Print a one line description of each disjoint Range making up this RangeList

Parameters
sis the output stream

◆ removeRange()

void RangeList::removeRange ( AddrSpace spc,
uintb  first,
uintb  last 
)

Remove a range of addresses.

Remove/narrow/split existing Range objects to eliminate the indicated addresses while still maintaining a disjoint cover.

Parameters
spcis the address space of the address range to remove
firstis the offset of the first byte of the range
lastis the offset of the last byte of the range

◆ restoreXml()

void RangeList::restoreXml ( const Element el,
const AddrSpaceManager manage 
)

Restore this RangeList from an XML stream.

Recover each individual disjoint Range for this RangeList as encoded in a <rangelist> tag.

Parameters
elis the XML element
manageis manager for retrieving address spaces

◆ saveXml()

void RangeList::saveXml ( ostream &  s) const

Write this RangeList to an XML stream.

Serialize this object to an XML <rangelist> tag

Parameters
sis the output stream

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