1
0
Fork 0

GUI: escape unicode and ascii mnemonic characters

This commit is contained in:
mrexodia 2017-06-25 03:00:36 +02:00
parent 7a2e6eb40e
commit 5747342938
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
6 changed files with 50 additions and 32 deletions

View File

@ -52,6 +52,10 @@ String StringUtils::Escape(unsigned char ch)
return "\\\\";
case '\"':
return "\\\"";
case '\a':
return "\\a";
case '\b':
return "\\b";
default:
if(!isprint(ch)) //unknown unprintable character
sprintf_s(buf, "\\x%02X", ch);

View File

@ -275,7 +275,6 @@ Instruction_t QBeaEngine::DecodeDataAt(byte_t* data, duint size, duint origBase,
if(infoIter == dataInstMap.end())
infoIter = dataInstMap.find(enc_byte);
int len = mEncodeMap->getDataSize(origBase + origInstRVA, 1);
QString mnemonic = _bLongDataInst ? infoIter.value().longName : infoIter.value().shortName;
@ -316,7 +315,6 @@ void QBeaEngine::UpdateDataInstructionMap()
dataInstMap.insert(enc_real10, {"real10", "real10", "long double"});
dataInstMap.insert(enc_ascii, {"ascii", "ascii", "string"});
dataInstMap.insert(enc_unicode, {"unicode", "unicode", "wstring"});
}
void QBeaEngine::setCodeFoldingManager(CodeFoldingHelper* CodeFoldingManager)

View File

@ -81,29 +81,6 @@ void CPUInfoBox::clear()
setInfoLine(3, "");
}
static QString escapeCh(QChar ch)
{
switch(ch.unicode())
{
case '\t':
return "\\t";
case '\f':
return "\\f";
case '\v':
return "\\v";
case '\n':
return "\\n";
case '\r':
return "\\r";
case '\\':
return "\\\\";
case '\"':
return "\\\"";
default:
return QString(1, ch);
}
}
QString CPUInfoBox::getSymbolicName(dsint addr)
{
char labelText[MAX_LABEL_SIZE] = "";
@ -129,13 +106,13 @@ QString CPUInfoBox::getSymbolicName(dsint addr)
{
QChar c = QChar((char)addr);
if(c.isPrint() || c.isSpace())
finalText += QString(" '%1'").arg(escapeCh(c));
finalText += QString(" '%1'").arg(EscapeCh(c));
}
else if(addr == (addr & 0xFFF)) //UNICODE?
{
QChar c = QChar((ushort)addr);
if(c.isPrint() || c.isSpace())
finalText += QString(" L'%1'").arg(escapeCh(c));
finalText += QString(" L'%1'").arg(EscapeCh(c));
}
}
return finalText;

View File

@ -68,6 +68,14 @@ QString DataCopyDialog::printEscapedString(bool & bPrevWasHex, int ch, const cha
data = "\\\"";
bPrevWasHex = false;
break;
case '\a':
data = "\\a";
bPrevWasHex = false;
break;
case '\b':
data = "\\b";
bPrevWasHex = false;
break;
default:
if(ch >= ' ' && ch <= '~')
{

View File

@ -12,6 +12,35 @@ QString ToLongDoubleString(void* buffer)
return str;
}
QString EscapeCh(QChar ch)
{
switch(ch.unicode())
{
case '\0':
return "\\0";
case '\t':
return "\\t";
case '\f':
return "\\f";
case '\v':
return "\\v";
case '\n':
return "\\n";
case '\r':
return "\\r";
case '\\':
return "\\\\";
case '\"':
return "\\\"";
case '\a':
return "\\a";
case '\b':
return "\\b";
default:
return QString(1, ch);
}
}
QString GetDataTypeString(void* buffer, duint size, ENCODETYPE type)
{
switch(type)
@ -23,13 +52,13 @@ QString GetDataTypeString(void* buffer, duint size, ENCODETYPE type)
case enc_dword:
return ToIntegralString<unsigned int>(buffer);
case enc_fword:
return QString(ByteReverse(QByteArray((char*)buffer, 6)).toHex());
return QString(ByteReverse(QByteArray((const char*)buffer, 6)).toHex());
case enc_qword:
return ToIntegralString<unsigned long long int>(buffer);
case enc_tbyte:
return QString(ByteReverse(QByteArray((char*)buffer, 10)).toHex());
return QString(ByteReverse(QByteArray((const char*)buffer, 10)).toHex());
case enc_oword:
return QString(ByteReverse(QByteArray((char*)buffer, 16)).toHex());
return QString(ByteReverse(QByteArray((const char*)buffer, 16)).toHex());
case enc_mmword:
case enc_xmmword:
case enc_ymmword:
@ -41,9 +70,9 @@ QString GetDataTypeString(void* buffer, duint size, ENCODETYPE type)
case enc_real10:
return ToLongDoubleString(buffer);
case enc_ascii:
return QString::fromLocal8Bit((const char*)buffer, size);
return EscapeCh(*(const char*)buffer);
case enc_unicode:
return QString::fromWCharArray((const wchar_t*)buffer, size / sizeof(wchar_t));
return EscapeCh(*(const wchar_t*)buffer);
default:
return ToIntegralString<unsigned char>(buffer);
}

View File

@ -131,4 +131,6 @@ QString FILETIMEToDate(const FILETIME & date);
bool GetCommentFormat(duint addr, QString & comment, bool* autoComment = nullptr);
QString EscapeCh(QChar ch);
#endif // STRINGUTIL_H