Skip to content

Commit 925c2a1

Browse files
emseamrexodia
authored andcommitted
added settings to hide ptr sizes and defualt segments
1 parent 679aa23 commit 925c2a1

File tree

8 files changed

+108
-39
lines changed

8 files changed

+108
-39
lines changed

src/gui/Src/Disassembler/capstone_gui.cpp

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ CapstoneTokenizer::CapstoneTokenizer(int maxModuleLength)
99
isNop(false),
1010
_mnemonicType(TokenType::Uncategorized)
1111
{
12-
SetConfig(false, false, false, false, false, false, false);
12+
SetConfig(false, false, false, false, false, false, false, false, false);
1313
}
1414

1515
static CapstoneTokenizer::TokenColor colorNamesMap[CapstoneTokenizer::TokenType::Last];
@@ -174,6 +174,8 @@ void CapstoneTokenizer::UpdateConfig()
174174
SetConfig(ConfigBool("Disassembler", "Uppercase"),
175175
ConfigBool("Disassembler", "TabbedMnemonic"),
176176
ConfigBool("Disassembler", "ArgumentSpaces"),
177+
ConfigBool("Disassembler", "HidePointerSizes"),
178+
ConfigBool("Disassembler", "HideNormalSegments"),
177179
ConfigBool("Disassembler", "MemorySpaces"),
178180
ConfigBool("Disassembler", "NoHighlightOperands"),
179181
ConfigBool("Disassembler", "NoCurrentModuleText"),
@@ -182,11 +184,13 @@ void CapstoneTokenizer::UpdateConfig()
182184
UpdateStringPool();
183185
}
184186

185-
void CapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues)
187+
void CapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bHidePointerSizes, bool bHideNormalSegments, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues)
186188
{
187189
_bUppercase = bUppercase;
188190
_bTabbedMnemonic = bTabbedMnemonic;
189191
_bArgumentSpaces = bArgumentSpaces;
192+
_bHidePointerSizes = bHidePointerSizes;
193+
_bHideNormalSegments = bHideNormalSegments;
190194
_bMemorySpaces = bMemorySpaces;
191195
_bNoHighlightOperands = bNoHighlightOperands;
192196
_bNoCurrentModuleText = bNoCurrentModuleText;
@@ -510,22 +514,30 @@ bool CapstoneTokenizer::tokenizeImmOperand(const ZydisDecodedOperand & op)
510514

511515
bool CapstoneTokenizer::tokenizeMemOperand(const ZydisDecodedOperand & op)
512516
{
513-
//memory size
514517
auto opsize = op.size / 8;
515-
const char* sizeText = _cp.MemSizeName(opsize);
516518

517-
if(sizeText)
519+
//memory size
520+
if(!_bHidePointerSizes)
518521
{
519-
addToken(TokenType::MemorySize, QString(sizeText) + " ptr");
520-
addToken(TokenType::Space, " ");
522+
const char* sizeText = _cp.MemSizeName(opsize);
523+
if(sizeText)
524+
{
525+
addToken(TokenType::MemorySize, QString(sizeText) + " ptr");
526+
addToken(TokenType::Space, " ");
527+
}
521528
}
522529

523-
//memory segment
524530
const auto & mem = op.mem;
525-
auto segmentType = mem.segment == ArchValue(ZYDIS_REGISTER_FS, ZYDIS_REGISTER_GS)
526-
? TokenType::MnemonicUnusual : TokenType::MemorySegment;
527-
addToken(segmentType, _cp.RegName(mem.segment));
528-
addToken(TokenType::Uncategorized, ":");
531+
532+
//memory segment
533+
bool bUnusualSegment = (mem.segment == ZYDIS_REGISTER_FS || mem.segment == ZYDIS_REGISTER_GS);
534+
if(!_bHideNormalSegments || bUnusualSegment)
535+
{
536+
auto segmentType = mem.segment == ArchValue(ZYDIS_REGISTER_FS, ZYDIS_REGISTER_GS)
537+
? TokenType::MnemonicUnusual : TokenType::MemorySegment;
538+
addToken(segmentType, _cp.RegName(mem.segment));
539+
addToken(TokenType::Uncategorized, ":");
540+
}
529541

530542
//memory opening bracket
531543
auto bracketsType = TokenType::MemoryBrackets;

src/gui/Src/Disassembler/capstone_gui.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ class CapstoneTokenizer
157157
bool Tokenize(duint addr, const unsigned char* data, int datasize, InstructionToken & instruction);
158158
bool TokenizeData(const QString & datatype, const QString & data, InstructionToken & instruction);
159159
void UpdateConfig();
160-
void SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues);
160+
void SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bHidePointerSizes, bool bHideNormalSegments, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues);
161161
int Size() const;
162162
const Zydis & GetCapstone() const;
163163

@@ -180,6 +180,8 @@ class CapstoneTokenizer
180180
bool _bUppercase;
181181
bool _bTabbedMnemonic;
182182
bool _bArgumentSpaces;
183+
bool _bHidePointerSizes;
184+
bool _bHideNormalSegments;
183185
bool _bMemorySpaces;
184186
bool _bNoHighlightOperands;
185187
bool _bNoCurrentModuleText;

src/gui/Src/Disassembler/cs_capstone_gui.cpp

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ CsCapstoneTokenizer::CsCapstoneTokenizer(int maxModuleLength)
99
isNop(false),
1010
_mnemonicType(CapstoneTokenizer::TokenType::Uncategorized)
1111
{
12-
SetConfig(false, false, false, false, false, false, false);
12+
SetConfig(false, false, false, false, false, false, false, false, false);
1313
}
1414

1515
static CapstoneTokenizer::TokenColor colorNamesMap[CapstoneTokenizer::TokenType::Last];
@@ -171,6 +171,8 @@ void CsCapstoneTokenizer::UpdateConfig()
171171
SetConfig(ConfigBool("Disassembler", "Uppercase"),
172172
ConfigBool("Disassembler", "TabbedMnemonic"),
173173
ConfigBool("Disassembler", "ArgumentSpaces"),
174+
ConfigBool("Disassembler", "HidePointerSizes"),
175+
ConfigBool("Disassembler", "HideNormalSegments"),
174176
ConfigBool("Disassembler", "MemorySpaces"),
175177
ConfigBool("Disassembler", "NoHighlightOperands"),
176178
ConfigBool("Disassembler", "NoCurrentModuleText"),
@@ -179,11 +181,13 @@ void CsCapstoneTokenizer::UpdateConfig()
179181
UpdateStringPool();
180182
}
181183

182-
void CsCapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues)
184+
void CsCapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bHidePointerSizes, bool bHideNormalSegments, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues)
183185
{
184186
_bUppercase = bUppercase;
185187
_bTabbedMnemonic = bTabbedMnemonic;
186188
_bArgumentSpaces = bArgumentSpaces;
189+
_bHidePointerSizes = bHidePointerSizes;
190+
_bHideNormalSegments = bHideNormalSegments;
187191
_bMemorySpaces = bMemorySpaces;
188192
_bNoHighlightOperands = bNoHighlightOperands;
189193
_bNoCurrentModuleText = bNoCurrentModuleText;
@@ -512,35 +516,44 @@ bool CsCapstoneTokenizer::tokenizeImmOperand(const cs_x86_op & op)
512516
bool CsCapstoneTokenizer::tokenizeMemOperand(const cs_x86_op & op)
513517
{
514518
//memory size
515-
const char* sizeText = _cp.MemSizeName(op.size);
516-
if(!sizeText)
517-
return false;
518-
addToken(CapstoneTokenizer::TokenType::MemorySize, QString(sizeText) + " ptr");
519-
addToken(CapstoneTokenizer::TokenType::Space, " ");
519+
if(!_bHidePointerSizes)
520+
{
521+
const char* sizeText = _cp.MemSizeName(op.size);
522+
if(!sizeText)
523+
return false;
524+
addToken(CapstoneTokenizer::TokenType::MemorySize, QString(sizeText) + " ptr");
525+
addToken(CapstoneTokenizer::TokenType::Space, " ");
526+
}
520527

521-
//memory segment
522528
const auto & mem = op.mem;
523-
const char* segmentText = _cp.RegName(mem.segment);
524-
if(mem.segment == X86_REG_INVALID) //segment not set
529+
530+
//memory segment
531+
bool bUnusualSegment = (mem.segment == X86_REG_FS || mem.segment == X86_REG_GS);
532+
if(!_bHideNormalSegments || bUnusualSegment)
525533
{
526-
switch(mem.base)
534+
const char* segmentText = _cp.RegName(mem.segment);
535+
if(mem.segment == X86_REG_INVALID) //segment not set
527536
{
528-
case X86_REG_RSP:
529-
case X86_REG_RBP:
530-
case X86_REG_ESP:
531-
case X86_REG_EBP:
532-
case X86_REG_SP:
533-
case X86_REG_BP:
534-
segmentText = "ss";
535-
break;
536-
default:
537-
segmentText = "ds";
538-
break;
537+
switch(mem.base)
538+
{
539+
case X86_REG_RSP:
540+
case X86_REG_RBP:
541+
case X86_REG_ESP:
542+
case X86_REG_EBP:
543+
case X86_REG_SP:
544+
case X86_REG_BP:
545+
segmentText = "ss";
546+
break;
547+
default:
548+
segmentText = "ds";
549+
break;
550+
}
539551
}
552+
auto segmentType = op.reg == ArchValue(X86_REG_FS, X86_REG_GS)
553+
? CapstoneTokenizer::TokenType::MnemonicUnusual : CapstoneTokenizer::TokenType::MemorySegment;
554+
addToken(segmentType, segmentText);
555+
addToken(CapstoneTokenizer::TokenType::Uncategorized, ":");
540556
}
541-
auto segmentType = op.reg == ArchValue(X86_REG_FS, X86_REG_GS) ? CapstoneTokenizer::TokenType::MnemonicUnusual : CapstoneTokenizer::TokenType::MemorySegment;
542-
addToken(segmentType, segmentText);
543-
addToken(CapstoneTokenizer::TokenType::Uncategorized, ":");
544557

545558
//memory opening bracket
546559
auto bracketsType = CapstoneTokenizer::TokenType::MemoryBrackets;

src/gui/Src/Disassembler/cs_capstone_gui.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class CsCapstoneTokenizer
1717
bool Tokenize(duint addr, const unsigned char* data, int datasize, CapstoneTokenizer::InstructionToken & instruction);
1818
bool TokenizeData(const QString & datatype, const QString & data, CapstoneTokenizer::InstructionToken & instruction);
1919
void UpdateConfig();
20-
void SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues);
20+
void SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bHidePointerSizes, bool bHideNormalSegments, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues);
2121
int Size() const;
2222
const Capstone & GetCapstone() const;
2323

@@ -40,6 +40,8 @@ class CsCapstoneTokenizer
4040
bool _bUppercase;
4141
bool _bTabbedMnemonic;
4242
bool _bArgumentSpaces;
43+
bool _bHidePointerSizes;
44+
bool _bHideNormalSegments;
4345
bool _bMemorySpaces;
4446
bool _bNoHighlightOperands;
4547
bool _bNoCurrentModuleText;

src/gui/Src/Gui/SettingsDialog.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ void SettingsDialog::LoadSettings()
6666
settings.engineVerboseExceptionLogging = true;
6767
settings.exceptionRanges = &realExceptionRanges;
6868
settings.disasmArgumentSpaces = false;
69+
settings.disasmHidePointerSizes = false;
70+
settings.disasmHideNormalSegments = false;
6971
settings.disasmMemorySpaces = false;
7072
settings.disasmUppercase = false;
7173
settings.disasmOnlyCipAutoComments = false;
@@ -194,6 +196,8 @@ void SettingsDialog::LoadSettings()
194196

195197
//Disasm tab
196198
GetSettingBool("Disassembler", "ArgumentSpaces", &settings.disasmArgumentSpaces);
199+
GetSettingBool("Disassembler", "HidePointerSizes", &settings.disasmHidePointerSizes);
200+
GetSettingBool("Disassembler", "HideNormalSegments", &settings.disasmHideNormalSegments);
197201
GetSettingBool("Disassembler", "MemorySpaces", &settings.disasmMemorySpaces);
198202
GetSettingBool("Disassembler", "Uppercase", &settings.disasmUppercase);
199203
GetSettingBool("Disassembler", "OnlyCipAutoComments", &settings.disasmOnlyCipAutoComments);
@@ -206,6 +210,8 @@ void SettingsDialog::LoadSettings()
206210
if(BridgeSettingGetUint("Disassembler", "MaxModuleSize", &cur))
207211
settings.disasmMaxModuleSize = int(cur);
208212
ui->chkArgumentSpaces->setChecked(settings.disasmArgumentSpaces);
213+
ui->chkHidePointerSizes->setChecked(settings.disasmHidePointerSizes);
214+
ui->chkHideNormalSegments->setChecked(settings.disasmHideNormalSegments);
209215
ui->chkMemorySpaces->setChecked(settings.disasmMemorySpaces);
210216
ui->chkUppercase->setChecked(settings.disasmUppercase);
211217
ui->chkOnlyCipAutoComments->setChecked(settings.disasmOnlyCipAutoComments);
@@ -353,6 +359,8 @@ void SettingsDialog::SaveSettings()
353359

354360
//Disasm tab
355361
BridgeSettingSetUint("Disassembler", "ArgumentSpaces", settings.disasmArgumentSpaces);
362+
BridgeSettingSetUint("Disassembler", "HidePointerSizes", settings.disasmHidePointerSizes);
363+
BridgeSettingSetUint("Disassembler", "HideNormalSegments", settings.disasmHideNormalSegments);
356364
BridgeSettingSetUint("Disassembler", "MemorySpaces", settings.disasmMemorySpaces);
357365
BridgeSettingSetUint("Disassembler", "Uppercase", settings.disasmUppercase);
358366
BridgeSettingSetUint("Disassembler", "OnlyCipAutoComments", settings.disasmOnlyCipAutoComments);
@@ -695,6 +703,18 @@ void SettingsDialog::on_chkArgumentSpaces_stateChanged(int arg1)
695703
settings.disasmArgumentSpaces = arg1 != Qt::Unchecked;
696704
}
697705

706+
void SettingsDialog::on_chkHidePointerSizes_stateChanged(int arg1)
707+
{
708+
bTokenizerConfigUpdated = true;
709+
settings.disasmHidePointerSizes = arg1 != Qt::Unchecked;
710+
}
711+
712+
void SettingsDialog::on_chkHideNormalSegments_stateChanged(int arg1)
713+
{
714+
bTokenizerConfigUpdated = true;
715+
settings.disasmHideNormalSegments = arg1 != Qt::Unchecked;
716+
}
717+
698718
void SettingsDialog::on_chkMemorySpaces_stateChanged(int arg1)
699719
{
700720
bTokenizerConfigUpdated = true;

src/gui/Src/Gui/SettingsDialog.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ private slots:
6363
void on_btnAddLast_clicked();
6464
//Disasm tab
6565
void on_chkArgumentSpaces_stateChanged(int arg1);
66+
void on_chkHidePointerSizes_stateChanged(int arg1);
67+
void on_chkHideNormalSegments_stateChanged(int arg1);
6668
void on_chkMemorySpaces_stateChanged(int arg1);
6769
void on_chkUppercase_stateChanged(int arg1);
6870
void on_chkOnlyCipAutoComments_stateChanged(int arg1);
@@ -159,6 +161,8 @@ private slots:
159161
//Disasm Tab
160162
bool disasmArgumentSpaces;
161163
bool disasmMemorySpaces;
164+
bool disasmHidePointerSizes;
165+
bool disasmHideNormalSegments;
162166
bool disasmUppercase;
163167
bool disasmOnlyCipAutoComments;
164168
bool disasmTabBetweenMnemonicAndArguments;

src/gui/Src/Gui/SettingsDialog.ui

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,20 @@
489489
</property>
490490
</widget>
491491
</item>
492+
<item>
493+
<widget class="QCheckBox" name="chkHidePointerSizes">
494+
<property name="text">
495+
<string>Hide pointer sizes</string>
496+
</property>
497+
</widget>
498+
</item>
499+
<item>
500+
<widget class="QCheckBox" name="chkHideNormalSegments">
501+
<property name="text">
502+
<string>Only show FS/GS segments</string>
503+
</property>
504+
</widget>
505+
</item>
492506
<item>
493507
<widget class="QCheckBox" name="chkMemorySpaces">
494508
<property name="text">

src/gui/Src/Utils/Configuration.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
245245
//bool settings
246246
QMap<QString, bool> disassemblyBool;
247247
disassemblyBool.insert("ArgumentSpaces", false);
248+
disassemblyBool.insert("HidePointerSizes", false);
249+
disassemblyBool.insert("HideNormalSegments", false);
248250
disassemblyBool.insert("MemorySpaces", false);
249251
disassemblyBool.insert("KeepSize", false);
250252
disassemblyBool.insert("FillNOPs", false);

0 commit comments

Comments
 (0)