1
0
Fork 0

√ Allow hiding local module name for memory addresses in the same page. (#1474)

This commit is contained in:
Torusrxxx 2017-02-21 18:34:34 +00:00 committed by Duncan Ogilvie
parent 54ac01ef66
commit ef2af9d631
6 changed files with 39 additions and 5 deletions

View File

@ -9,7 +9,7 @@ CapstoneTokenizer::CapstoneTokenizer(int maxModuleLength)
isNop(false),
_mnemonicType(TokenType::Uncategorized)
{
SetConfig(false, false, false, false, false);
SetConfig(false, false, false, false, false, false);
}
CapstoneTokenizer::TokenColor colorNamesMap[CapstoneTokenizer::TokenType::Last];
@ -172,18 +172,20 @@ void CapstoneTokenizer::UpdateConfig()
ConfigBool("Disassembler", "TabbedMnemonic"),
ConfigBool("Disassembler", "ArgumentSpaces"),
ConfigBool("Disassembler", "MemorySpaces"),
ConfigBool("Disassembler", "NoHighlightOperands"));
ConfigBool("Disassembler", "NoHighlightOperands"),
ConfigBool("Disassembler", "NoCurrentModuleText"));
_maxModuleLength = (int)ConfigUint("Disassembler", "MaxModuleSize");
UpdateStringPool();
}
void CapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands)
void CapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText)
{
_bUppercase = bUppercase;
_bTabbedMnemonic = bTabbedMnemonic;
_bArgumentSpaces = bArgumentSpaces;
_bMemorySpaces = bMemorySpaces;
_bNoHighlightOperands = bNoHighlightOperands;
_bNoCurrentModuleText = bNoCurrentModuleText;
}
int CapstoneTokenizer::Size() const
@ -322,7 +324,18 @@ QString CapstoneTokenizer::printValue(const TokenValue & value, bool expandModul
duint addr = value.value;
bool bHasLabel = DbgGetLabelAt(addr, SEG_DEFAULT, label_);
labelText = QString(label_);
bool bHasModule = (expandModule && DbgGetModuleAt(addr, module_) && !QString(labelText).startsWith("JMP.&"));
bool bHasModule;
if(_bNoCurrentModuleText)
{
duint size, base;
base = DbgMemFindBaseAddr(this->GetCapstone().Address(), &size);
if(addr >= base && addr < base + size)
bHasModule = false;
else
bHasModule = (expandModule && DbgGetModuleAt(addr, module_) && !QString(labelText).startsWith("JMP.&"));
}
else
bHasModule = (expandModule && DbgGetModuleAt(addr, module_) && !QString(labelText).startsWith("JMP.&"));
moduleText = QString(module_);
if(maxModuleLength != -1)
moduleText.truncate(maxModuleLength);

View File

@ -147,7 +147,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);
void SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText);
int Size() const;
const Capstone & GetCapstone() const;
@ -173,6 +173,7 @@ private:
bool _bArgumentSpaces;
bool _bMemorySpaces;
bool _bNoHighlightOperands;
bool _bNoCurrentModuleText;
TokenType _mnemonicType;
void addToken(TokenType type, QString text, const TokenValue & value);

View File

@ -69,6 +69,7 @@ void SettingsDialog::LoadSettings()
settings.disasmUppercase = false;
settings.disasmOnlyCipAutoComments = false;
settings.disasmTabBetweenMnemonicAndArguments = false;
settings.disasmNoCurrentModuleText = false;
settings.guiNoForegroundWindow = true;
//Events tab
@ -194,6 +195,7 @@ void SettingsDialog::LoadSettings()
GetSettingBool("Disassembler", "TabbedMnemonic", &settings.disasmTabBetweenMnemonicAndArguments);
GetSettingBool("Disassembler", "NoHighlightOperands", &settings.disasmNoHighlightOperands);
GetSettingBool("Disassembler", "PermanentHighlightingMode", &settings.disasmPermanentHighlightingMode);
GetSettingBool("Disassembler", "NoCurrentModuleText", &settings.disasmNoCurrentModuleText);
ui->chkArgumentSpaces->setChecked(settings.disasmArgumentSpaces);
ui->chkMemorySpaces->setChecked(settings.disasmMemorySpaces);
ui->chkUppercase->setChecked(settings.disasmUppercase);
@ -201,6 +203,7 @@ void SettingsDialog::LoadSettings()
ui->chkTabBetweenMnemonicAndArguments->setChecked(settings.disasmTabBetweenMnemonicAndArguments);
ui->chkNoHighlightOperands->setChecked(settings.disasmNoHighlightOperands);
ui->chkPermanentHighlightingMode->setChecked(settings.disasmPermanentHighlightingMode);
ui->chkNoCurrentModuleText->setChecked(settings.disasmNoCurrentModuleText);
//Gui tab
GetSettingBool("Gui", "FpuRegistersLittleEndian", &settings.guiFpuRegistersLittleEndian);
@ -332,6 +335,7 @@ void SettingsDialog::SaveSettings()
BridgeSettingSetUint("Disassembler", "TabbedMnemonic", settings.disasmTabBetweenMnemonicAndArguments);
BridgeSettingSetUint("Disassembler", "NoHighlightOperands", settings.disasmNoHighlightOperands);
BridgeSettingSetUint("Disassembler", "PermanentHighlightingMode", settings.disasmPermanentHighlightingMode);
BridgeSettingSetUint("Disassembler", "NoCurrentModuleText", settings.disasmNoCurrentModuleText);
//Gui tab
BridgeSettingSetUint("Gui", "FpuRegistersLittleEndian", settings.guiFpuRegistersLittleEndian);
@ -770,3 +774,9 @@ void SettingsDialog::on_chkNoWow64SingleStepWorkaround_toggled(bool checked)
{
settings.engineNoWow64SingleStepWorkaround = checked;
}
void SettingsDialog::on_chkNoCurrentModuleText_toggled(bool checked)
{
bTokenizerConfigUpdated = true;
settings.disasmNoCurrentModuleText = checked;
}

View File

@ -68,6 +68,7 @@ private slots:
void on_chkOnlyCipAutoComments_stateChanged(int arg1);
void on_chkTabBetweenMnemonicAndArguments_stateChanged(int arg1);
void on_chkNoHighlightOperands_toggled(bool checked);
void on_chkNoCurrentModuleText_toggled(bool checked);
void on_chkPermanentHighlightingMode_toggled(bool checked);
//Gui Tab
void on_chkFpuRegistersLittleEndian_stateChanged(int arg1);
@ -153,6 +154,7 @@ private:
bool disasmOnlyCipAutoComments;
bool disasmTabBetweenMnemonicAndArguments;
bool disasmNoHighlightOperands;
bool disasmNoCurrentModuleText;
bool disasmPermanentHighlightingMode;
//Gui Tab
bool guiFpuRegistersLittleEndian;

View File

@ -517,6 +517,13 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkNoCurrentModuleText">
<property name="text">
<string>Hide module name for local memory addresses</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkPermanentHighlightingMode">
<property name="text">

View File

@ -205,6 +205,7 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
disassemblyBool.insert("LongDataInstruction", false);
disassemblyBool.insert("NoHighlightOperands", false);
disassemblyBool.insert("PermanentHighlightingMode", false);
disassemblyBool.insert("NoCurrentModuleText", false);
defaultBools.insert("Disassembler", disassemblyBool);
QMap<QString, bool> engineBool;