1
0
Fork 0

GUI: resolved issue #77 (find command)

This commit is contained in:
Mr. eXoDia 2014-08-09 15:43:58 +02:00
parent 1a0df393d6
commit 55d16977f2
3 changed files with 54 additions and 1 deletions

View File

@ -472,6 +472,12 @@ void CPUDisassembly::setupRightClickContextMenu()
// Menu
mSearchMenu = new QMenu("&Search for", this);
// Command
mSearchCommand = new QAction("C&ommand", this);
mSearchCommand->setShortcutContext(Qt::WidgetShortcut);
this->addAction(mSearchCommand);
connect(mSearchCommand, SIGNAL(triggered()), this, SLOT(findCommand()));
// Constant
mSearchConstant = new QAction("&Constant", this);
connect(mSearchConstant, SIGNAL(triggered()), this, SLOT(findConstant()));
@ -529,6 +535,7 @@ void CPUDisassembly::refreshShortcutsSlot()
mSearchPattern->setShortcut(ConfigShortcut("ActionFindPattern"));
mEnableHighlightingMode->setShortcut(ConfigShortcut("ActionHighlightingMode"));
mCopySelection->setShortcut(ConfigShortcut("ActionCopy"));
mSearchCommand->setShortcut(ConfigShortcut("ActionFind"));
}
void CPUDisassembly::gotoOrigin()
@ -782,7 +789,6 @@ void CPUDisassembly::assembleAt()
return;
int_t wRVA = getInitialSelection();
uint_t wVA = rvaToVa(wRVA);
LineEditDialog mLineEdit(this);
QString addr_text = QString("%1").arg(wVA, sizeof(int_t) * 2, 16, QChar('0')).toUpper();
QByteArray wBuffer;
@ -804,6 +810,7 @@ void CPUDisassembly::assembleAt()
QBeaEngine* disasm = new QBeaEngine();
Instruction_t instr = disasm->DisassembleAt(reinterpret_cast<byte_t*>(wBuffer.data()), wMaxByteCountToRead, 0, 0, wVA);
LineEditDialog mLineEdit(this);
mLineEdit.setText(instr.instStr);
mLineEdit.setWindowTitle("Assemble at " + addr_text);
mLineEdit.setCheckBoxText("&Fill with NOP's");
@ -1127,3 +1134,45 @@ void CPUDisassembly::copyDisassembly()
}
Bridge::CopyToClipboard(clipboard);
}
void CPUDisassembly::findCommand()
{
if(!DbgIsDebugging())
return;
LineEditDialog mLineEdit(this);
mLineEdit.enableCheckBox(true);
mLineEdit.setCheckBoxText("Entire &Block");
mLineEdit.setCheckBox(ConfigBool("Disassembler", "FindCommandEntireBlock"));
mLineEdit.setWindowTitle("Find Command");
if(mLineEdit.exec() != QDialog::Accepted)
return;
Config()->setBool("Disassembler", "FindCommandEntireBlock", mLineEdit.bChecked);
char error[MAX_ERROR_SIZE] = "";
unsigned char dest[16];
int asmsize = 0;
uint_t va = rvaToVa(getInitialSelection());
if(!DbgFunctions()->Assemble(va + mMemPage->getSize() / 2, dest, &asmsize, mLineEdit.editText.toUtf8().constData(), error))
{
QMessageBox msg(QMessageBox::Critical, "Error!", "Failed to assemble instruction \"" + mLineEdit.editText + "\" (" + error + ")");
msg.setWindowIcon(QIcon(":/icons/images/compile-error.png"));
msg.setParent(this, Qt::Dialog);
msg.setWindowFlags(msg.windowFlags() & (~Qt::WindowContextHelpButtonHint));
msg.exec();
return;
}
QString addr_text = QString("%1").arg(va, sizeof(int_t) * 2, 16, QChar('0')).toUpper();
if(!mLineEdit.bChecked)
{
int_t size = mMemPage->getSize();
DbgCmdExec(QString("findasm \"%1\", %2, .%3").arg(mLineEdit.editText).arg(addr_text).arg(size).toUtf8().constData());
}
else
DbgCmdExec(QString("findasm \"%1\", %2").arg(mLineEdit.editText).arg(addr_text).toUtf8().constData());
emit displayReferencesWidget();
}

View File

@ -76,6 +76,7 @@ public slots:
void copySelectionNoBytes();
void copyAddress();
void copyDisassembly();
void findCommand();
private:
@ -114,6 +115,7 @@ private:
QAction* mGotoPrevious;
QAction* mGotoNext;
QAction* mReferenceSelectedAddress;
QAction* mSearchCommand;
QAction* mSearchConstant;
QAction* mSearchStrings;
QAction* mSearchCalls;

View File

@ -149,6 +149,7 @@ Configuration::Configuration() : QObject()
disassemblyBool.insert("MemorySpaces", false);
disassemblyBool.insert("FillNOPs", false);
disassemblyBool.insert("Uppercase", false);
disassemblyBool.insert("FindCommandEntireBlock", false);
defaultBools.insert("Disassembler", disassemblyBool);
//uint settings
@ -238,6 +239,7 @@ Configuration::Configuration() : QObject()
defaultShortcuts.insert("ActionFindReferencesToSelectedAddress", Shortcut(tr("Actions -> Find References to Selected Address"), "Ctrl+R"));
defaultShortcuts.insert("ActionFindPattern", Shortcut(tr("Actions -> Find Pattern"), "Ctrl+B"));
defaultShortcuts.insert("ActionHighlightingMode", Shortcut(tr("Actions -> Highlighting Mode"), "Ctrl+H"));
defaultShortcuts.insert("ActionFind", Shortcut(tr("Actions -> Find"), "Ctrl+F"));
defaultShortcuts.insert("ActionIncreaseRegister", Shortcut(tr("Actions -> Increase Register"), "+"));
defaultShortcuts.insert("ActionDecreaseRegister", Shortcut(tr("Actions -> Decrease Register"), "-"));