Added ahb to disasm context menu

This commit is contained in:
xarkes 2018-02-12 10:48:06 +01:00
parent b119181757
commit b229513620
4 changed files with 56 additions and 1 deletions

View File

@ -347,6 +347,17 @@ void CutterCore::setImmediateBase(const QString &r2BaseName, RVA offset)
emit instructionChanged(offset); emit instructionChanged(offset);
} }
void CutterCore::setCurrentBits(int bits, RVA offset)
{
if (offset == RVA_INVALID)
{
offset = getOffset();
}
this->cmd("ahb " + QString::number(bits) + " @ " + QString::number(offset));
emit instructionChanged(offset);
}
void CutterCore::seek(ut64 offset) void CutterCore::seek(ut64 offset)
{ {
// Slower than using the API, but the API is not complete // Slower than using the API, but the API is not complete

View File

@ -258,6 +258,7 @@ public:
void delComment(RVA addr); void delComment(RVA addr);
void setImmediateBase(const QString &r2BaseName, RVA offset = RVA_INVALID); void setImmediateBase(const QString &r2BaseName, RVA offset = RVA_INVALID);
void setCurrentBits(int bits, RVA offset = RVA_INVALID);
bool loadFile(QString path, uint64_t loadaddr = 0LL, uint64_t mapaddr = 0LL, bool rw = false, int va = 0, int idx = 0, bool loadbin = false, const QString &forceBinPlugin = nullptr); bool loadFile(QString path, uint64_t loadaddr = 0LL, uint64_t mapaddr = 0LL, bool rw = false, int va = 0, int idx = 0, bool loadbin = false, const QString &forceBinPlugin = nullptr);
bool tryFile(QString path, bool rw); bool tryFile(QString path, bool rw);

View File

@ -29,7 +29,10 @@ DisassemblyContextMenu::DisassemblyContextMenu(QWidget *parent)
actionSetBasePort(this), actionSetBasePort(this),
actionSetBaseIPAddr(this), actionSetBaseIPAddr(this),
actionSetBaseSyscall(this), actionSetBaseSyscall(this),
actionSetBaseString(this) actionSetBaseString(this),
actionSetBits16(this),
actionSetBits32(this),
actionSetBits64(this)
{ {
createAction(&actionCopy, tr("Copy"), getCopySequence(), SLOT(on_actionCopy_triggered())); createAction(&actionCopy, tr("Copy"), getCopySequence(), SLOT(on_actionCopy_triggered()));
copySeparator = addSeparator(); copySeparator = addSeparator();
@ -61,6 +64,16 @@ DisassemblyContextMenu::DisassemblyContextMenu(QWidget *parent)
setBaseMenu->addAction(&actionSetBaseSyscall); setBaseMenu->addAction(&actionSetBaseSyscall);
actionSetBaseString.setText(tr("String")); actionSetBaseString.setText(tr("String"));
setBaseMenu->addAction(&actionSetBaseString); setBaseMenu->addAction(&actionSetBaseString);
setBitsMenu = new QMenu(tr("Set current bits to..."), this);
setBitsMenuAction = addMenu(setBitsMenu);
actionSetBits16.setText("16");
setBitsMenu->addAction(&actionSetBits16);
actionSetBits32.setText("32");
setBitsMenu->addAction(&actionSetBits32);
actionSetBits64.setText("64");
setBitsMenu->addAction(&actionSetBits64);
addSeparator(); addSeparator();
createAction(&actionXRefs, tr("Show X-Refs"), getXRefSequence(), SLOT(on_actionXRefs_triggered())); createAction(&actionXRefs, tr("Show X-Refs"), getXRefSequence(), SLOT(on_actionXRefs_triggered()));
createAction(&actionDisplayOptions, tr("Show Options"), getDisplayOptionsSequence(), SLOT(on_actionDisplayOptions_triggered())); createAction(&actionDisplayOptions, tr("Show Options"), getDisplayOptionsSequence(), SLOT(on_actionDisplayOptions_triggered()));
@ -74,6 +87,10 @@ DisassemblyContextMenu::DisassemblyContextMenu(QWidget *parent)
connect(&actionSetBaseSyscall, SIGNAL(triggered(bool)), this, SLOT(on_actionSetBaseSyscall_triggered())); connect(&actionSetBaseSyscall, SIGNAL(triggered(bool)), this, SLOT(on_actionSetBaseSyscall_triggered()));
connect(&actionSetBaseString, SIGNAL(triggered(bool)), this, SLOT(on_actionSetBaseString_triggered())); connect(&actionSetBaseString, SIGNAL(triggered(bool)), this, SLOT(on_actionSetBaseString_triggered()));
connect(&actionSetBits16, SIGNAL(triggered(bool)), this, SLOT(on_actionSetBits16_triggered()));
connect(&actionSetBits32, SIGNAL(triggered(bool)), this, SLOT(on_actionSetBits32_triggered()));
connect(&actionSetBits64, SIGNAL(triggered(bool)), this, SLOT(on_actionSetBits64_triggered()));
connect(this, SIGNAL(aboutToShow()), this, SLOT(aboutToShowSlot())); connect(this, SIGNAL(aboutToShow()), this, SLOT(aboutToShowSlot()));
} }
@ -102,6 +119,7 @@ void DisassemblyContextMenu::aboutToShowSlot()
auto keys = instObject.keys(); auto keys = instObject.keys();
bool immBase = keys.contains("val") || keys.contains("ptr"); bool immBase = keys.contains("val") || keys.contains("ptr");
setBaseMenuAction->setVisible(immBase); setBaseMenuAction->setVisible(immBase);
setBitsMenuAction->setVisible(true);
actionCreateFunction.setVisible(true); actionCreateFunction.setVisible(true);
@ -411,6 +429,21 @@ void DisassemblyContextMenu::on_actionSetBaseString_triggered()
Core()->setImmediateBase("s", offset); Core()->setImmediateBase("s", offset);
} }
void DisassemblyContextMenu::on_actionSetBits16_triggered()
{
Core()->setCurrentBits(16, offset);
}
void DisassemblyContextMenu::on_actionSetBits32_triggered()
{
Core()->setCurrentBits(32, offset);
}
void DisassemblyContextMenu::on_actionSetBits64_triggered()
{
Core()->setCurrentBits(64, offset);
}
void DisassemblyContextMenu::createAction(QString name, QKeySequence keySequence, const char *slot) void DisassemblyContextMenu::createAction(QString name, QKeySequence keySequence, const char *slot)
{ {
QAction *action = new QAction(this); QAction *action = new QAction(this);

View File

@ -46,6 +46,10 @@ private slots:
void on_actionSetBaseSyscall_triggered(); void on_actionSetBaseSyscall_triggered();
void on_actionSetBaseString_triggered(); void on_actionSetBaseString_triggered();
void on_actionSetBits16_triggered();
void on_actionSetBits32_triggered();
void on_actionSetBits64_triggered();
private: private:
QKeySequence getCopySequence() const; QKeySequence getCopySequence() const;
QKeySequence getCommentSequence() const; QKeySequence getCommentSequence() const;
@ -88,6 +92,12 @@ private:
QAction actionSetBaseSyscall; QAction actionSetBaseSyscall;
QAction actionSetBaseString; QAction actionSetBaseString;
QMenu *setBitsMenu;
QAction *setBitsMenuAction;
QAction actionSetBits16;
QAction actionSetBits32;
QAction actionSetBits64;
// For creating anonymous entries (that are always visible) // For creating anonymous entries (that are always visible)
void createAction(QString name, QKeySequence keySequence, const char *slot); void createAction(QString name, QKeySequence keySequence, const char *slot);
void createAction(QAction *action, QString name, QKeySequence keySequence, const char *slot); void createAction(QAction *action, QString name, QKeySequence keySequence, const char *slot);