1
0
Fork 0

added settings to hide ptr sizes and defualt segments

This commit is contained in:
Emily Clemens 2017-11-11 11:01:20 -08:00 committed by Duncan Ogilvie
parent 679aa23340
commit 925c2a1222
8 changed files with 108 additions and 39 deletions

View File

@ -9,7 +9,7 @@ CapstoneTokenizer::CapstoneTokenizer(int maxModuleLength)
isNop(false),
_mnemonicType(TokenType::Uncategorized)
{
SetConfig(false, false, false, false, false, false, false);
SetConfig(false, false, false, false, false, false, false, false, false);
}
static CapstoneTokenizer::TokenColor colorNamesMap[CapstoneTokenizer::TokenType::Last];
@ -174,6 +174,8 @@ void CapstoneTokenizer::UpdateConfig()
SetConfig(ConfigBool("Disassembler", "Uppercase"),
ConfigBool("Disassembler", "TabbedMnemonic"),
ConfigBool("Disassembler", "ArgumentSpaces"),
ConfigBool("Disassembler", "HidePointerSizes"),
ConfigBool("Disassembler", "HideNormalSegments"),
ConfigBool("Disassembler", "MemorySpaces"),
ConfigBool("Disassembler", "NoHighlightOperands"),
ConfigBool("Disassembler", "NoCurrentModuleText"),
@ -182,11 +184,13 @@ void CapstoneTokenizer::UpdateConfig()
UpdateStringPool();
}
void CapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues)
void CapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bHidePointerSizes, bool bHideNormalSegments, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues)
{
_bUppercase = bUppercase;
_bTabbedMnemonic = bTabbedMnemonic;
_bArgumentSpaces = bArgumentSpaces;
_bHidePointerSizes = bHidePointerSizes;
_bHideNormalSegments = bHideNormalSegments;
_bMemorySpaces = bMemorySpaces;
_bNoHighlightOperands = bNoHighlightOperands;
_bNoCurrentModuleText = bNoCurrentModuleText;
@ -510,22 +514,30 @@ bool CapstoneTokenizer::tokenizeImmOperand(const ZydisDecodedOperand & op)
bool CapstoneTokenizer::tokenizeMemOperand(const ZydisDecodedOperand & op)
{
//memory size
auto opsize = op.size / 8;
const char* sizeText = _cp.MemSizeName(opsize);
if(sizeText)
//memory size
if(!_bHidePointerSizes)
{
addToken(TokenType::MemorySize, QString(sizeText) + " ptr");
addToken(TokenType::Space, " ");
const char* sizeText = _cp.MemSizeName(opsize);
if(sizeText)
{
addToken(TokenType::MemorySize, QString(sizeText) + " ptr");
addToken(TokenType::Space, " ");
}
}
//memory segment
const auto & mem = op.mem;
auto segmentType = mem.segment == ArchValue(ZYDIS_REGISTER_FS, ZYDIS_REGISTER_GS)
? TokenType::MnemonicUnusual : TokenType::MemorySegment;
addToken(segmentType, _cp.RegName(mem.segment));
addToken(TokenType::Uncategorized, ":");
//memory segment
bool bUnusualSegment = (mem.segment == ZYDIS_REGISTER_FS || mem.segment == ZYDIS_REGISTER_GS);
if(!_bHideNormalSegments || bUnusualSegment)
{
auto segmentType = mem.segment == ArchValue(ZYDIS_REGISTER_FS, ZYDIS_REGISTER_GS)
? TokenType::MnemonicUnusual : TokenType::MemorySegment;
addToken(segmentType, _cp.RegName(mem.segment));
addToken(TokenType::Uncategorized, ":");
}
//memory opening bracket
auto bracketsType = TokenType::MemoryBrackets;

View File

@ -157,7 +157,7 @@ public:
bool Tokenize(duint addr, const unsigned char* data, int datasize, InstructionToken & instruction);
bool TokenizeData(const QString & datatype, const QString & data, InstructionToken & instruction);
void UpdateConfig();
void SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues);
void SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bHidePointerSizes, bool bHideNormalSegments, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues);
int Size() const;
const Zydis & GetCapstone() const;
@ -180,6 +180,8 @@ private:
bool _bUppercase;
bool _bTabbedMnemonic;
bool _bArgumentSpaces;
bool _bHidePointerSizes;
bool _bHideNormalSegments;
bool _bMemorySpaces;
bool _bNoHighlightOperands;
bool _bNoCurrentModuleText;

View File

@ -9,7 +9,7 @@ CsCapstoneTokenizer::CsCapstoneTokenizer(int maxModuleLength)
isNop(false),
_mnemonicType(CapstoneTokenizer::TokenType::Uncategorized)
{
SetConfig(false, false, false, false, false, false, false);
SetConfig(false, false, false, false, false, false, false, false, false);
}
static CapstoneTokenizer::TokenColor colorNamesMap[CapstoneTokenizer::TokenType::Last];
@ -171,6 +171,8 @@ void CsCapstoneTokenizer::UpdateConfig()
SetConfig(ConfigBool("Disassembler", "Uppercase"),
ConfigBool("Disassembler", "TabbedMnemonic"),
ConfigBool("Disassembler", "ArgumentSpaces"),
ConfigBool("Disassembler", "HidePointerSizes"),
ConfigBool("Disassembler", "HideNormalSegments"),
ConfigBool("Disassembler", "MemorySpaces"),
ConfigBool("Disassembler", "NoHighlightOperands"),
ConfigBool("Disassembler", "NoCurrentModuleText"),
@ -179,11 +181,13 @@ void CsCapstoneTokenizer::UpdateConfig()
UpdateStringPool();
}
void CsCapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues)
void CsCapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bHidePointerSizes, bool bHideNormalSegments, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues)
{
_bUppercase = bUppercase;
_bTabbedMnemonic = bTabbedMnemonic;
_bArgumentSpaces = bArgumentSpaces;
_bHidePointerSizes = bHidePointerSizes;
_bHideNormalSegments = bHideNormalSegments;
_bMemorySpaces = bMemorySpaces;
_bNoHighlightOperands = bNoHighlightOperands;
_bNoCurrentModuleText = bNoCurrentModuleText;
@ -512,35 +516,44 @@ bool CsCapstoneTokenizer::tokenizeImmOperand(const cs_x86_op & op)
bool CsCapstoneTokenizer::tokenizeMemOperand(const cs_x86_op & op)
{
//memory size
const char* sizeText = _cp.MemSizeName(op.size);
if(!sizeText)
return false;
addToken(CapstoneTokenizer::TokenType::MemorySize, QString(sizeText) + " ptr");
addToken(CapstoneTokenizer::TokenType::Space, " ");
if(!_bHidePointerSizes)
{
const char* sizeText = _cp.MemSizeName(op.size);
if(!sizeText)
return false;
addToken(CapstoneTokenizer::TokenType::MemorySize, QString(sizeText) + " ptr");
addToken(CapstoneTokenizer::TokenType::Space, " ");
}
const auto & mem = op.mem;
//memory segment
const auto & mem = op.mem;
const char* segmentText = _cp.RegName(mem.segment);
if(mem.segment == X86_REG_INVALID) //segment not set
bool bUnusualSegment = (mem.segment == X86_REG_FS || mem.segment == X86_REG_GS);
if(!_bHideNormalSegments || bUnusualSegment)
{
switch(mem.base)
const char* segmentText = _cp.RegName(mem.segment);
if(mem.segment == X86_REG_INVALID) //segment not set
{
case X86_REG_RSP:
case X86_REG_RBP:
case X86_REG_ESP:
case X86_REG_EBP:
case X86_REG_SP:
case X86_REG_BP:
segmentText = "ss";
break;
default:
segmentText = "ds";
break;
switch(mem.base)
{
case X86_REG_RSP:
case X86_REG_RBP:
case X86_REG_ESP:
case X86_REG_EBP:
case X86_REG_SP:
case X86_REG_BP:
segmentText = "ss";
break;
default:
segmentText = "ds";
break;
}
}
auto segmentType = op.reg == ArchValue(X86_REG_FS, X86_REG_GS)
? CapstoneTokenizer::TokenType::MnemonicUnusual : CapstoneTokenizer::TokenType::MemorySegment;
addToken(segmentType, segmentText);
addToken(CapstoneTokenizer::TokenType::Uncategorized, ":");
}
auto segmentType = op.reg == ArchValue(X86_REG_FS, X86_REG_GS) ? CapstoneTokenizer::TokenType::MnemonicUnusual : CapstoneTokenizer::TokenType::MemorySegment;
addToken(segmentType, segmentText);
addToken(CapstoneTokenizer::TokenType::Uncategorized, ":");
//memory opening bracket
auto bracketsType = CapstoneTokenizer::TokenType::MemoryBrackets;

View File

@ -17,7 +17,7 @@ public:
bool Tokenize(duint addr, const unsigned char* data, int datasize, CapstoneTokenizer::InstructionToken & instruction);
bool TokenizeData(const QString & datatype, const QString & data, CapstoneTokenizer::InstructionToken & instruction);
void UpdateConfig();
void SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues);
void SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bHidePointerSizes, bool bHideNormalSegments, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues);
int Size() const;
const Capstone & GetCapstone() const;
@ -40,6 +40,8 @@ private:
bool _bUppercase;
bool _bTabbedMnemonic;
bool _bArgumentSpaces;
bool _bHidePointerSizes;
bool _bHideNormalSegments;
bool _bMemorySpaces;
bool _bNoHighlightOperands;
bool _bNoCurrentModuleText;

View File

@ -66,6 +66,8 @@ void SettingsDialog::LoadSettings()
settings.engineVerboseExceptionLogging = true;
settings.exceptionRanges = &realExceptionRanges;
settings.disasmArgumentSpaces = false;
settings.disasmHidePointerSizes = false;
settings.disasmHideNormalSegments = false;
settings.disasmMemorySpaces = false;
settings.disasmUppercase = false;
settings.disasmOnlyCipAutoComments = false;
@ -194,6 +196,8 @@ void SettingsDialog::LoadSettings()
//Disasm tab
GetSettingBool("Disassembler", "ArgumentSpaces", &settings.disasmArgumentSpaces);
GetSettingBool("Disassembler", "HidePointerSizes", &settings.disasmHidePointerSizes);
GetSettingBool("Disassembler", "HideNormalSegments", &settings.disasmHideNormalSegments);
GetSettingBool("Disassembler", "MemorySpaces", &settings.disasmMemorySpaces);
GetSettingBool("Disassembler", "Uppercase", &settings.disasmUppercase);
GetSettingBool("Disassembler", "OnlyCipAutoComments", &settings.disasmOnlyCipAutoComments);
@ -206,6 +210,8 @@ void SettingsDialog::LoadSettings()
if(BridgeSettingGetUint("Disassembler", "MaxModuleSize", &cur))
settings.disasmMaxModuleSize = int(cur);
ui->chkArgumentSpaces->setChecked(settings.disasmArgumentSpaces);
ui->chkHidePointerSizes->setChecked(settings.disasmHidePointerSizes);
ui->chkHideNormalSegments->setChecked(settings.disasmHideNormalSegments);
ui->chkMemorySpaces->setChecked(settings.disasmMemorySpaces);
ui->chkUppercase->setChecked(settings.disasmUppercase);
ui->chkOnlyCipAutoComments->setChecked(settings.disasmOnlyCipAutoComments);
@ -353,6 +359,8 @@ void SettingsDialog::SaveSettings()
//Disasm tab
BridgeSettingSetUint("Disassembler", "ArgumentSpaces", settings.disasmArgumentSpaces);
BridgeSettingSetUint("Disassembler", "HidePointerSizes", settings.disasmHidePointerSizes);
BridgeSettingSetUint("Disassembler", "HideNormalSegments", settings.disasmHideNormalSegments);
BridgeSettingSetUint("Disassembler", "MemorySpaces", settings.disasmMemorySpaces);
BridgeSettingSetUint("Disassembler", "Uppercase", settings.disasmUppercase);
BridgeSettingSetUint("Disassembler", "OnlyCipAutoComments", settings.disasmOnlyCipAutoComments);
@ -695,6 +703,18 @@ void SettingsDialog::on_chkArgumentSpaces_stateChanged(int arg1)
settings.disasmArgumentSpaces = arg1 != Qt::Unchecked;
}
void SettingsDialog::on_chkHidePointerSizes_stateChanged(int arg1)
{
bTokenizerConfigUpdated = true;
settings.disasmHidePointerSizes = arg1 != Qt::Unchecked;
}
void SettingsDialog::on_chkHideNormalSegments_stateChanged(int arg1)
{
bTokenizerConfigUpdated = true;
settings.disasmHideNormalSegments = arg1 != Qt::Unchecked;
}
void SettingsDialog::on_chkMemorySpaces_stateChanged(int arg1)
{
bTokenizerConfigUpdated = true;

View File

@ -63,6 +63,8 @@ private slots:
void on_btnAddLast_clicked();
//Disasm tab
void on_chkArgumentSpaces_stateChanged(int arg1);
void on_chkHidePointerSizes_stateChanged(int arg1);
void on_chkHideNormalSegments_stateChanged(int arg1);
void on_chkMemorySpaces_stateChanged(int arg1);
void on_chkUppercase_stateChanged(int arg1);
void on_chkOnlyCipAutoComments_stateChanged(int arg1);
@ -159,6 +161,8 @@ private:
//Disasm Tab
bool disasmArgumentSpaces;
bool disasmMemorySpaces;
bool disasmHidePointerSizes;
bool disasmHideNormalSegments;
bool disasmUppercase;
bool disasmOnlyCipAutoComments;
bool disasmTabBetweenMnemonicAndArguments;

View File

@ -489,6 +489,20 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkHidePointerSizes">
<property name="text">
<string>Hide pointer sizes</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkHideNormalSegments">
<property name="text">
<string>Only show FS/GS segments</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkMemorySpaces">
<property name="text">

View File

@ -245,6 +245,8 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
//bool settings
QMap<QString, bool> disassemblyBool;
disassemblyBool.insert("ArgumentSpaces", false);
disassemblyBool.insert("HidePointerSizes", false);
disassemblyBool.insert("HideNormalSegments", false);
disassemblyBool.insert("MemorySpaces", false);
disassemblyBool.insert("KeepSize", false);
disassemblyBool.insert("FillNOPs", false);