GUI: added binary copy + binary paste in Dump/Stack/Disassembly
This commit is contained in:
parent
9b6dfae064
commit
6e662f484d
|
@ -239,7 +239,19 @@ void CPUDisassembly::setupRightClickContextMenu()
|
||||||
this->addAction(mBinaryEditAction);
|
this->addAction(mBinaryEditAction);
|
||||||
mBinaryMenu->addAction(mBinaryEditAction);
|
mBinaryMenu->addAction(mBinaryEditAction);
|
||||||
connect(mBinaryEditAction, SIGNAL(triggered()), this, SLOT(binaryEditSlot()));
|
connect(mBinaryEditAction, SIGNAL(triggered()), this, SLOT(binaryEditSlot()));
|
||||||
///Setup menu actions
|
|
||||||
|
//Binary->Separator
|
||||||
|
mBinaryMenu->addSeparator();
|
||||||
|
|
||||||
|
//Binary->Copy
|
||||||
|
mBinaryCopyAction = new QAction("&Copy", this);
|
||||||
|
connect(mBinaryCopyAction, SIGNAL(triggered()), this, SLOT(binaryCopySlot()));
|
||||||
|
mBinaryMenu->addAction(mBinaryCopyAction);
|
||||||
|
|
||||||
|
//Binary->Paste
|
||||||
|
mBinaryPasteAction = new QAction("&Paste", this);
|
||||||
|
connect(mBinaryPasteAction, SIGNAL(triggered()), this, SLOT(binaryPasteSlot()));
|
||||||
|
mBinaryMenu->addAction(mBinaryPasteAction);
|
||||||
|
|
||||||
// Labels
|
// Labels
|
||||||
mSetLabel = new QAction("Label", this);
|
mSetLabel = new QAction("Label", this);
|
||||||
|
@ -805,3 +817,32 @@ void CPUDisassembly::binaryEditSlot()
|
||||||
mMemPage->write(patched.constData(), selStart, patched.size());
|
mMemPage->write(patched.constData(), selStart, patched.size());
|
||||||
reloadData();
|
reloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPUDisassembly::binaryCopySlot()
|
||||||
|
{
|
||||||
|
HexEditDialog hexEdit(this);
|
||||||
|
int_t selStart = getSelectionStart();
|
||||||
|
int_t selSize = getSelectionEnd() - selStart + 1;
|
||||||
|
byte_t* data = new byte_t[selSize];
|
||||||
|
mMemPage->read(data, selStart, selSize);
|
||||||
|
hexEdit.mHexEdit->setData(QByteArray((const char*)data, selSize));
|
||||||
|
delete [] data;
|
||||||
|
Bridge::CopyToClipboard(hexEdit.mHexEdit->pattern(true).toUtf8().constData());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPUDisassembly::binaryPasteSlot()
|
||||||
|
{
|
||||||
|
HexEditDialog hexEdit(this);
|
||||||
|
int_t selStart = getSelectionStart();
|
||||||
|
int_t selSize = getSelectionEnd() - selStart + 1;
|
||||||
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
|
hexEdit.mHexEdit->setData(clipboard->text());
|
||||||
|
GuiAddStatusBarMessage(QString(hexEdit.mHexEdit->pattern(true) + "\n").toUtf8().constData());
|
||||||
|
byte_t* data = new byte_t[selSize];
|
||||||
|
mMemPage->read(data, selStart, selSize);
|
||||||
|
QByteArray patched = hexEdit.mHexEdit->applyMaskedData(QByteArray((const char*)data, selSize));
|
||||||
|
if(patched.size() < selSize)
|
||||||
|
selSize = patched.size();
|
||||||
|
mMemPage->write(patched.constData(), selStart, selSize);
|
||||||
|
reloadData();
|
||||||
|
}
|
||||||
|
|
|
@ -59,6 +59,8 @@ public slots:
|
||||||
void selectionSet(const SELECTIONDATA* selection);
|
void selectionSet(const SELECTIONDATA* selection);
|
||||||
void enableHighlightingMode();
|
void enableHighlightingMode();
|
||||||
void binaryEditSlot();
|
void binaryEditSlot();
|
||||||
|
void binaryCopySlot();
|
||||||
|
void binaryPasteSlot();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -72,6 +74,8 @@ private:
|
||||||
QMenu* mSearchMenu;
|
QMenu* mSearchMenu;
|
||||||
|
|
||||||
QAction* mBinaryEditAction;
|
QAction* mBinaryEditAction;
|
||||||
|
QAction* mBinaryCopyAction;
|
||||||
|
QAction* mBinaryPasteAction;
|
||||||
QAction* mToggleInt3BpAction;
|
QAction* mToggleInt3BpAction;
|
||||||
QAction* mSetHwBpAction;
|
QAction* mSetHwBpAction;
|
||||||
QAction* mClearHwBpAction;
|
QAction* mClearHwBpAction;
|
||||||
|
|
|
@ -90,6 +90,19 @@ void CPUDump::setupContextMenu()
|
||||||
connect(mBinaryEditAction, SIGNAL(triggered()), this, SLOT(binaryEditSlot()));
|
connect(mBinaryEditAction, SIGNAL(triggered()), this, SLOT(binaryEditSlot()));
|
||||||
mBinaryMenu->addAction(mBinaryEditAction);
|
mBinaryMenu->addAction(mBinaryEditAction);
|
||||||
|
|
||||||
|
//Binary->Separator
|
||||||
|
mBinaryMenu->addSeparator();
|
||||||
|
|
||||||
|
//Binary->Copy
|
||||||
|
mBinaryCopyAction = new QAction("&Copy", this);
|
||||||
|
connect(mBinaryCopyAction, SIGNAL(triggered()), this, SLOT(binaryCopySlot()));
|
||||||
|
mBinaryMenu->addAction(mBinaryCopyAction);
|
||||||
|
|
||||||
|
//Binary->Paste
|
||||||
|
mBinaryPasteAction = new QAction("&Paste", this);
|
||||||
|
connect(mBinaryPasteAction, SIGNAL(triggered()), this, SLOT(binaryPasteSlot()));
|
||||||
|
mBinaryMenu->addAction(mBinaryPasteAction);
|
||||||
|
|
||||||
//Label
|
//Label
|
||||||
mSetLabelAction = new QAction("Set Label", this);
|
mSetLabelAction = new QAction("Set Label", this);
|
||||||
mSetLabelAction->setShortcutContext(Qt::WidgetShortcut);
|
mSetLabelAction->setShortcutContext(Qt::WidgetShortcut);
|
||||||
|
@ -992,3 +1005,32 @@ void CPUDump::binaryEditSlot()
|
||||||
mMemPage->write(patched.constData(), selStart, patched.size());
|
mMemPage->write(patched.constData(), selStart, patched.size());
|
||||||
reloadData();
|
reloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPUDump::binaryCopySlot()
|
||||||
|
{
|
||||||
|
HexEditDialog hexEdit(this);
|
||||||
|
int_t selStart = getSelectionStart();
|
||||||
|
int_t selSize = getSelectionEnd() - selStart + 1;
|
||||||
|
byte_t* data = new byte_t[selSize];
|
||||||
|
mMemPage->read(data, selStart, selSize);
|
||||||
|
hexEdit.mHexEdit->setData(QByteArray((const char*)data, selSize));
|
||||||
|
delete [] data;
|
||||||
|
Bridge::CopyToClipboard(hexEdit.mHexEdit->pattern(true).toUtf8().constData());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPUDump::binaryPasteSlot()
|
||||||
|
{
|
||||||
|
HexEditDialog hexEdit(this);
|
||||||
|
int_t selStart = getSelectionStart();
|
||||||
|
int_t selSize = getSelectionEnd() - selStart + 1;
|
||||||
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
|
hexEdit.mHexEdit->setData(clipboard->text());
|
||||||
|
|
||||||
|
byte_t* data = new byte_t[selSize];
|
||||||
|
mMemPage->read(data, selStart, selSize);
|
||||||
|
QByteArray patched = hexEdit.mHexEdit->applyMaskedData(QByteArray((const char*)data, selSize));
|
||||||
|
if(patched.size() < selSize)
|
||||||
|
selSize = patched.size();
|
||||||
|
mMemPage->write(patched.constData(), selStart, selSize);
|
||||||
|
reloadData();
|
||||||
|
}
|
||||||
|
|
|
@ -70,6 +70,8 @@ public slots:
|
||||||
void selectionSet(const SELECTIONDATA* selection);
|
void selectionSet(const SELECTIONDATA* selection);
|
||||||
|
|
||||||
void binaryEditSlot();
|
void binaryEditSlot();
|
||||||
|
void binaryCopySlot();
|
||||||
|
void binaryPasteSlot();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QMenu* mBreakpointMenu;
|
QMenu* mBreakpointMenu;
|
||||||
|
@ -141,6 +143,8 @@ private:
|
||||||
|
|
||||||
QMenu* mBinaryMenu;
|
QMenu* mBinaryMenu;
|
||||||
QAction* mBinaryEditAction;
|
QAction* mBinaryEditAction;
|
||||||
|
QAction* mBinaryCopyAction;
|
||||||
|
QAction* mBinaryPasteAction;
|
||||||
|
|
||||||
QMenu* mSpecialMenu;
|
QMenu* mSpecialMenu;
|
||||||
QMenu* mCustomMenu;
|
QMenu* mCustomMenu;
|
||||||
|
|
|
@ -61,6 +61,19 @@ void CPUStack::setupContextMenu()
|
||||||
connect(mBinaryEditAction, SIGNAL(triggered()), this, SLOT(binaryEditSlot()));
|
connect(mBinaryEditAction, SIGNAL(triggered()), this, SLOT(binaryEditSlot()));
|
||||||
mBinaryMenu->addAction(mBinaryEditAction);
|
mBinaryMenu->addAction(mBinaryEditAction);
|
||||||
|
|
||||||
|
//Binary->Separator
|
||||||
|
mBinaryMenu->addSeparator();
|
||||||
|
|
||||||
|
//Binary->Copy
|
||||||
|
mBinaryCopyAction = new QAction("&Copy", this);
|
||||||
|
connect(mBinaryCopyAction, SIGNAL(triggered()), this, SLOT(binaryCopySlot()));
|
||||||
|
mBinaryMenu->addAction(mBinaryCopyAction);
|
||||||
|
|
||||||
|
//Binary->Paste
|
||||||
|
mBinaryPasteAction = new QAction("&Paste", this);
|
||||||
|
connect(mBinaryPasteAction, SIGNAL(triggered()), this, SLOT(binaryPasteSlot()));
|
||||||
|
mBinaryMenu->addAction(mBinaryPasteAction);
|
||||||
|
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
mGotoSp = new QAction("Follow R&SP", this);
|
mGotoSp = new QAction("Follow R&SP", this);
|
||||||
mGotoBp = new QAction("Follow R&BP", this);
|
mGotoBp = new QAction("Follow R&BP", this);
|
||||||
|
@ -332,3 +345,32 @@ void CPUStack::binaryEditSlot()
|
||||||
mMemPage->write(patched.constData(), selStart, patched.size());
|
mMemPage->write(patched.constData(), selStart, patched.size());
|
||||||
reloadData();
|
reloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPUStack::binaryCopySlot()
|
||||||
|
{
|
||||||
|
HexEditDialog hexEdit(this);
|
||||||
|
int_t selStart = getSelectionStart();
|
||||||
|
int_t selSize = getSelectionEnd() - selStart + 1;
|
||||||
|
byte_t* data = new byte_t[selSize];
|
||||||
|
mMemPage->read(data, selStart, selSize);
|
||||||
|
hexEdit.mHexEdit->setData(QByteArray((const char*)data, selSize));
|
||||||
|
delete [] data;
|
||||||
|
Bridge::CopyToClipboard(hexEdit.mHexEdit->pattern(true).toUtf8().constData());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPUStack::binaryPasteSlot()
|
||||||
|
{
|
||||||
|
HexEditDialog hexEdit(this);
|
||||||
|
int_t selStart = getSelectionStart();
|
||||||
|
int_t selSize = getSelectionEnd() - selStart + 1;
|
||||||
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
|
hexEdit.mHexEdit->setData(clipboard->text());
|
||||||
|
|
||||||
|
byte_t* data = new byte_t[selSize];
|
||||||
|
mMemPage->read(data, selStart, selSize);
|
||||||
|
QByteArray patched = hexEdit.mHexEdit->applyMaskedData(QByteArray((const char*)data, selSize));
|
||||||
|
if(patched.size() < selSize)
|
||||||
|
selSize = patched.size();
|
||||||
|
mMemPage->write(patched.constData(), selStart, selSize);
|
||||||
|
reloadData();
|
||||||
|
}
|
||||||
|
|
|
@ -32,12 +32,16 @@ public slots:
|
||||||
void followDumpSlot();
|
void followDumpSlot();
|
||||||
void followStackSlot();
|
void followStackSlot();
|
||||||
void binaryEditSlot();
|
void binaryEditSlot();
|
||||||
|
void binaryCopySlot();
|
||||||
|
void binaryPasteSlot();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint_t mCsp;
|
uint_t mCsp;
|
||||||
|
|
||||||
QMenu* mBinaryMenu;
|
QMenu* mBinaryMenu;
|
||||||
QAction* mBinaryEditAction;
|
QAction* mBinaryEditAction;
|
||||||
|
QAction* mBinaryCopyAction;
|
||||||
|
QAction* mBinaryPasteAction;
|
||||||
QAction* mGotoSp;
|
QAction* mGotoSp;
|
||||||
QAction* mGotoBp;
|
QAction* mGotoBp;
|
||||||
QAction* mGotoExpression;
|
QAction* mGotoExpression;
|
||||||
|
|
Loading…
Reference in New Issue