Ghidra Decompiler Analysis Engine
|
An implementation of StringManager that understands terminated unicode strings. More...
#include <stringmanage.hh>
Public Member Functions | |
StringManagerUnicode (Architecture *g, int4 max) | |
Constructor. More... | |
virtual const vector< uint1 > & | getStringData (const Address &addr, Datatype *charType, bool &isTrunc) |
Retrieve string data at the given address as a UTF8 byte array. More... | |
bool | writeUnicode (ostream &s, uint1 *buffer, int4 size, int4 charsize) |
Translate/copy unicode to UTF8. More... | |
Public Member Functions inherited from StringManager | |
StringManager (int4 max) | |
Constructor. More... | |
virtual | ~StringManager (void) |
Destructor. | |
bool | isString (const Address &addr, Datatype *charType) |
void | saveXml (ostream &s) const |
Save cached strings to a stream as XML. More... | |
void | restoreXml (const Element *el, const AddrSpaceManager *m) |
Restore string cache from XML. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from StringManager | |
static bool | hasCharTerminator (const uint1 *buffer, int4 size, int4 charsize) |
Check for a unicode string terminator. More... | |
static int4 | readUtf16 (const uint1 *buf, bool bigend) |
Read a UTF16 code point from a byte array. More... | |
static void | writeUtf8 (ostream &s, int4 codepoint) |
Write unicode character to stream in UTF8 encoding. More... | |
static int4 | getCodepoint (const uint1 *buf, int4 charsize, bool bigend, int4 &skip) |
Extract next unicode codepoint. More... | |
Protected Attributes inherited from StringManager | |
map< Address, StringData > | stringMap |
Map from address to string data. | |
int4 | maximumChars |
Maximum characters in a string before truncating. | |
An implementation of StringManager that understands terminated unicode strings.
This class understands UTF8, UTF16, and UTF32 encodings. It reports a string if its sees a valid encoding that is null terminated.
StringManagerUnicode::StringManagerUnicode | ( | Architecture * | g, |
int4 | max | ||
) |
g | is the underlying architecture (and loadimage) |
max | is the maximum number of bytes to allow in a decoded string |
|
virtual |
Retrieve string data at the given address as a UTF8 byte array.
If the address does not represent string data, a zero length vector is returned. Otherwise, the string data is fetched, converted to a UTF8 encoding, cached and returned.
addr | is the given address |
charType | is a character data-type indicating the encoding |
isTrunc | passes back whether the string is truncated |
Implements StringManager.
bool StringManagerUnicode::writeUnicode | ( | ostream & | s, |
uint1 * | buffer, | ||
int4 | size, | ||
int4 | charsize | ||
) |
Translate/copy unicode to UTF8.
Assume the buffer contains a null terminated unicode encoded string. Write the characters out (as UTF8) to the stream.
s | is the output stream |
buffer | is the given byte buffer |
size | is the number of bytes in the buffer |
charsize | specifies the encoding (1=UTF8 2=UTF16 4=UTF32) |