added settings to hide ptr sizes and defualt segments
This commit is contained in:
parent
679aa23340
commit
925c2a1222
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue