decompiler  1.0.0
Public Member Functions | Private Member Functions | Private Attributes | List of all members
ghidra::LoadImageXml Class Reference

Implementation of the LoadImage interface using underlying data stored in an XML format. More...

#include <loadimage_xml.hh>

Inheritance diagram for ghidra::LoadImageXml:
ghidra::LoadImage

Public Member Functions

 LoadImageXml (const string &f, const Element *el)
 Constructor. More...
 
void open (const AddrSpaceManager *m)
 Read XML tags into the containers. More...
 
void clear (void)
 Clear out all the caches.
 
void encode (Encoder &encoder) const
 Encode the image to a stream. More...
 
virtual void loadFill (uint1 *ptr, int4 size, const Address &addr)
 Get data from the LoadImage. More...
 
virtual void openSymbols (void) const
 Prepare to read symbols. More...
 
virtual bool getNextSymbol (LoadImageFunc &record) const
 Get the next symbol record. More...
 
virtual void getReadonly (RangeList &list) const
 Return list of readonly address ranges. More...
 
virtual string getArchType (void) const
 Get a string indicating the architecture type. More...
 
virtual void adjustVma (long adjust)
 Adjust load addresses with a global offset. More...
 
- Public Member Functions inherited from ghidra::LoadImage
 LoadImage (const string &f)
 LoadImage constructor. More...
 
virtual ~LoadImage (void)
 LoadImage destructor. More...
 
const string & getFileName (void) const
 Get the name of the LoadImage. More...
 
virtual void closeSymbols (void) const
 Stop reading symbols. More...
 
virtual void openSectionInfo (void) const
 Prepare to read section info. More...
 
virtual void closeSectionInfo (void) const
 Stop reading section info. More...
 
virtual bool getNextSection (LoadImageSection &sec) const
 Get info on the next section. More...
 
uint1 * load (int4 size, const Address &addr)
 Load a chunk of image. More...
 

Private Member Functions

void pad (void)
 Make sure every chunk is followed by at least 512 bytes of pad.
 

Private Attributes

const Elementrootel
 The root XML element.
 
string archtype
 The architecture string.
 
const AddrSpaceManagermanage
 Manager of addresses.
 
set< Addressreadonlyset
 Starting address of read-only chunks.
 
map< Address, vector< uint1 > > chunk
 Chunks of image data, mapped by address.
 
map< Address, string > addrtosymbol
 Symbols sorted by address.
 
map< Address, string >::const_iterator cursymbol
 Current symbol being reported.
 

Additional Inherited Members

- Protected Attributes inherited from ghidra::LoadImage
string filename
 Name of the loadimage.
 

Detailed Description

Implementation of the LoadImage interface using underlying data stored in an XML format.

The image data is stored in an XML file in a <binaryimage> file. The data is encoded in <bytechunk> and potentially <symbol> files.

Constructor & Destructor Documentation

◆ LoadImageXml()

ghidra::LoadImageXml::LoadImageXml ( const string &  f,
const Element el 
)

Constructor.

Parameters
fis the (path to the) underlying XML file
elis the parsed form of the file

References archtype, ghidra::LoadImage::filename, ghidra::Element::getAttributeValue(), ghidra::Element::getName(), manage, and rootel.

Member Function Documentation

◆ adjustVma()

void ghidra::LoadImageXml::adjustVma ( long  adjust)
virtual

Adjust load addresses with a global offset.

Most load image formats automatically encode information about the true loading address(es) for the data in the image. But if this is missing or incorrect, this routine can be used to make a global adjustment to the load address. Only one adjustment is made across all addresses in the image. The offset passed to this method is added to the stored or default value for any address queried in the image. This is most often used in a raw binary file format. In this case, the entire executable file is intended to be read straight into RAM, as one contiguous chunk, in order to be executed. In the absence of any other info, the first byte of the image file is loaded at offset 0. This method then would adjust the load address of the first byte.

Parameters
adjustis the offset amount to be added to default values

Implements ghidra::LoadImage.

References ghidra::AddrSpace::addressToByte(), addrtosymbol, chunk, and ghidra::AddrSpace::getWordSize().

Referenced by getArchType().

◆ encode()

void ghidra::LoadImageXml::encode ( Encoder encoder) const

Encode the image to a stream.

Encode the byte chunks and symbols as elements

Parameters
encoderis the stream encoder

References addrtosymbol, archtype, chunk, ghidra::Encoder::closeElement(), ghidra::Encoder::openElement(), readonlyset, ghidra::Encoder::writeBool(), and ghidra::Encoder::writeString().

◆ getArchType()

virtual string ghidra::LoadImageXml::getArchType ( void  ) const
inlinevirtual

Get a string indicating the architecture type.

The load image class is intended to be a generic front-end to the large variety of load formats in use. This method should return a string that identifies the particular architecture this particular image is intended to run on. It is currently the responsibility of any derived LoadImage class to establish a format for this string, but it should generally contain some indication of the operating system and the processor.

Returns
the identifier string

Implements ghidra::LoadImage.

References adjustVma(), and archtype.

◆ getNextSymbol()

bool ghidra::LoadImageXml::getNextSymbol ( LoadImageFunc record) const
virtual

Get the next symbol record.

This method is used to read out an individual symbol record, LoadImageFunc, from the load image. Right now, the only information that can be read out are function starts and the associated function name. This method can be called repeatedly to iterate through all the symbols, until it returns false. This indicates the end of the symbols.

Parameters
recordis a reference to the symbol record to be filled in
Returns
true if there are more records to read

Reimplemented from ghidra::LoadImage.

References ghidra::LoadImageFunc::address, addrtosymbol, cursymbol, and ghidra::LoadImageFunc::name.

◆ getReadonly()

void ghidra::LoadImageXml::getReadonly ( RangeList list) const
virtual

Return list of readonly address ranges.

This method should read out information about all address ranges within the load image that are known to be readonly. This method is intended to be called only once, so all information should be written to the passed RangeList object.

Parameters
listis where readonly info will get put

Reimplemented from ghidra::LoadImage.

References chunk, ghidra::RangeList::insertRange(), and readonlyset.

◆ loadFill()

void ghidra::LoadImageXml::loadFill ( uint1 *  ptr,
int4  size,
const Address addr 
)
virtual

Get data from the LoadImage.

This is the core routine of a LoadImage. Given a particular address range, this routine retrieves the exact byte values that are stored at that address when the executable is loaded into RAM. The caller must supply a pre-allocated array of bytes where the returned bytes should be stored. If the requested address range does not exist in the image, or otherwise can't be retrieved, this method throws an DataUnavailError exception.

Parameters
ptrpoints to where the resulting bytes will be stored
sizeis the number of bytes to retrieve from the image
addris the starting address of the bytes to retrieve

Implements ghidra::LoadImage.

References chunk, ghidra::Address::overlap(), and ghidra::Address::printRaw().

◆ open()

void ghidra::LoadImageXml::open ( const AddrSpaceManager m)

◆ openSymbols()

void ghidra::LoadImageXml::openSymbols ( void  ) const
virtual

Prepare to read symbols.

This routine should read in and parse any symbol information that the load image contains about executable. Once this method is called, individual symbol records are read out using the getNextSymbol() method.

Reimplemented from ghidra::LoadImage.

References addrtosymbol, and cursymbol.


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