GUI: added binary fill (with wildcard support) on Dump/Stack/Disassembly
This commit is contained in:
parent
ed823e494b
commit
24915f551b
|
@ -243,6 +243,11 @@ void CPUDisassembly::setupRightClickContextMenu()
|
||||||
//Binary->Separator
|
//Binary->Separator
|
||||||
mBinaryMenu->addSeparator();
|
mBinaryMenu->addSeparator();
|
||||||
|
|
||||||
|
//Binary->Fill
|
||||||
|
mBinaryFillAction = new QAction("&Fill...", this);
|
||||||
|
connect(mBinaryFillAction, SIGNAL(triggered()), this, SLOT(binaryFillSlot()));
|
||||||
|
mBinaryMenu->addAction(mBinaryFillAction);
|
||||||
|
|
||||||
//Binary->Copy
|
//Binary->Copy
|
||||||
mBinaryCopyAction = new QAction("&Copy", this);
|
mBinaryCopyAction = new QAction("&Copy", this);
|
||||||
connect(mBinaryCopyAction, SIGNAL(triggered()), this, SLOT(binaryCopySlot()));
|
connect(mBinaryCopyAction, SIGNAL(triggered()), this, SLOT(binaryCopySlot()));
|
||||||
|
@ -818,6 +823,26 @@ void CPUDisassembly::binaryEditSlot()
|
||||||
reloadData();
|
reloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPUDisassembly::binaryFillSlot()
|
||||||
|
{
|
||||||
|
HexEditDialog hexEdit(this);
|
||||||
|
hexEdit.mHexEdit->setOverwriteMode(false);
|
||||||
|
int_t selStart = getSelectionStart();
|
||||||
|
hexEdit.setWindowTitle("Fill data at " + QString("%1").arg(rvaToVa(selStart), sizeof(int_t) * 2, 16, QChar('0')).toUpper());
|
||||||
|
if(hexEdit.exec() != QDialog::Accepted)
|
||||||
|
return;
|
||||||
|
QString pattern = hexEdit.mHexEdit->pattern();
|
||||||
|
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;
|
||||||
|
hexEdit.mHexEdit->fill(0, QString(pattern));
|
||||||
|
QByteArray patched(hexEdit.mHexEdit->data());
|
||||||
|
mMemPage->write(patched, selStart, patched.size());
|
||||||
|
reloadData();
|
||||||
|
}
|
||||||
|
|
||||||
void CPUDisassembly::binaryCopySlot()
|
void CPUDisassembly::binaryCopySlot()
|
||||||
{
|
{
|
||||||
HexEditDialog hexEdit(this);
|
HexEditDialog hexEdit(this);
|
||||||
|
@ -837,7 +862,7 @@ void CPUDisassembly::binaryPasteSlot()
|
||||||
int_t selSize = getSelectionEnd() - selStart + 1;
|
int_t selSize = getSelectionEnd() - selStart + 1;
|
||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
hexEdit.mHexEdit->setData(clipboard->text());
|
hexEdit.mHexEdit->setData(clipboard->text());
|
||||||
GuiAddStatusBarMessage(QString(hexEdit.mHexEdit->pattern(true) + "\n").toUtf8().constData());
|
|
||||||
byte_t* data = new byte_t[selSize];
|
byte_t* data = new byte_t[selSize];
|
||||||
mMemPage->read(data, selStart, selSize);
|
mMemPage->read(data, selStart, selSize);
|
||||||
QByteArray patched = hexEdit.mHexEdit->applyMaskedData(QByteArray((const char*)data, selSize));
|
QByteArray patched = hexEdit.mHexEdit->applyMaskedData(QByteArray((const char*)data, selSize));
|
||||||
|
|
|
@ -59,6 +59,7 @@ public slots:
|
||||||
void selectionSet(const SELECTIONDATA* selection);
|
void selectionSet(const SELECTIONDATA* selection);
|
||||||
void enableHighlightingMode();
|
void enableHighlightingMode();
|
||||||
void binaryEditSlot();
|
void binaryEditSlot();
|
||||||
|
void binaryFillSlot();
|
||||||
void binaryCopySlot();
|
void binaryCopySlot();
|
||||||
void binaryPasteSlot();
|
void binaryPasteSlot();
|
||||||
|
|
||||||
|
@ -74,6 +75,7 @@ private:
|
||||||
QMenu* mSearchMenu;
|
QMenu* mSearchMenu;
|
||||||
|
|
||||||
QAction* mBinaryEditAction;
|
QAction* mBinaryEditAction;
|
||||||
|
QAction* mBinaryFillAction;
|
||||||
QAction* mBinaryCopyAction;
|
QAction* mBinaryCopyAction;
|
||||||
QAction* mBinaryPasteAction;
|
QAction* mBinaryPasteAction;
|
||||||
QAction* mToggleInt3BpAction;
|
QAction* mToggleInt3BpAction;
|
||||||
|
|
|
@ -93,6 +93,11 @@ void CPUDump::setupContextMenu()
|
||||||
//Binary->Separator
|
//Binary->Separator
|
||||||
mBinaryMenu->addSeparator();
|
mBinaryMenu->addSeparator();
|
||||||
|
|
||||||
|
//Binary->Fill
|
||||||
|
mBinaryFillAction = new QAction("&Fill...", this);
|
||||||
|
connect(mBinaryFillAction, SIGNAL(triggered()), this, SLOT(binaryFillSlot()));
|
||||||
|
mBinaryMenu->addAction(mBinaryFillAction);
|
||||||
|
|
||||||
//Binary->Copy
|
//Binary->Copy
|
||||||
mBinaryCopyAction = new QAction("&Copy", this);
|
mBinaryCopyAction = new QAction("&Copy", this);
|
||||||
connect(mBinaryCopyAction, SIGNAL(triggered()), this, SLOT(binaryCopySlot()));
|
connect(mBinaryCopyAction, SIGNAL(triggered()), this, SLOT(binaryCopySlot()));
|
||||||
|
@ -1006,6 +1011,26 @@ void CPUDump::binaryEditSlot()
|
||||||
reloadData();
|
reloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPUDump::binaryFillSlot()
|
||||||
|
{
|
||||||
|
HexEditDialog hexEdit(this);
|
||||||
|
hexEdit.mHexEdit->setOverwriteMode(false);
|
||||||
|
int_t selStart = getSelectionStart();
|
||||||
|
hexEdit.setWindowTitle("Fill data at " + QString("%1").arg(rvaToVa(selStart), sizeof(int_t) * 2, 16, QChar('0')).toUpper());
|
||||||
|
if(hexEdit.exec() != QDialog::Accepted)
|
||||||
|
return;
|
||||||
|
QString pattern = hexEdit.mHexEdit->pattern();
|
||||||
|
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;
|
||||||
|
hexEdit.mHexEdit->fill(0, QString(pattern));
|
||||||
|
QByteArray patched(hexEdit.mHexEdit->data());
|
||||||
|
mMemPage->write(patched, selStart, patched.size());
|
||||||
|
reloadData();
|
||||||
|
}
|
||||||
|
|
||||||
void CPUDump::binaryCopySlot()
|
void CPUDump::binaryCopySlot()
|
||||||
{
|
{
|
||||||
HexEditDialog hexEdit(this);
|
HexEditDialog hexEdit(this);
|
||||||
|
|
|
@ -70,6 +70,7 @@ public slots:
|
||||||
void selectionSet(const SELECTIONDATA* selection);
|
void selectionSet(const SELECTIONDATA* selection);
|
||||||
|
|
||||||
void binaryEditSlot();
|
void binaryEditSlot();
|
||||||
|
void binaryFillSlot();
|
||||||
void binaryCopySlot();
|
void binaryCopySlot();
|
||||||
void binaryPasteSlot();
|
void binaryPasteSlot();
|
||||||
|
|
||||||
|
@ -143,6 +144,7 @@ private:
|
||||||
|
|
||||||
QMenu* mBinaryMenu;
|
QMenu* mBinaryMenu;
|
||||||
QAction* mBinaryEditAction;
|
QAction* mBinaryEditAction;
|
||||||
|
QAction* mBinaryFillAction;
|
||||||
QAction* mBinaryCopyAction;
|
QAction* mBinaryCopyAction;
|
||||||
QAction* mBinaryPasteAction;
|
QAction* mBinaryPasteAction;
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,11 @@ void CPUStack::setupContextMenu()
|
||||||
//Binary->Separator
|
//Binary->Separator
|
||||||
mBinaryMenu->addSeparator();
|
mBinaryMenu->addSeparator();
|
||||||
|
|
||||||
|
//Binary->Fill
|
||||||
|
mBinaryFillAction = new QAction("&Fill...", this);
|
||||||
|
connect(mBinaryFillAction, SIGNAL(triggered()), this, SLOT(binaryFillSlot()));
|
||||||
|
mBinaryMenu->addAction(mBinaryFillAction);
|
||||||
|
|
||||||
//Binary->Copy
|
//Binary->Copy
|
||||||
mBinaryCopyAction = new QAction("&Copy", this);
|
mBinaryCopyAction = new QAction("&Copy", this);
|
||||||
connect(mBinaryCopyAction, SIGNAL(triggered()), this, SLOT(binaryCopySlot()));
|
connect(mBinaryCopyAction, SIGNAL(triggered()), this, SLOT(binaryCopySlot()));
|
||||||
|
@ -346,6 +351,26 @@ void CPUStack::binaryEditSlot()
|
||||||
reloadData();
|
reloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPUStack::binaryFillSlot()
|
||||||
|
{
|
||||||
|
HexEditDialog hexEdit(this);
|
||||||
|
hexEdit.mHexEdit->setOverwriteMode(false);
|
||||||
|
int_t selStart = getSelectionStart();
|
||||||
|
hexEdit.setWindowTitle("Fill data at " + QString("%1").arg(rvaToVa(selStart), sizeof(int_t) * 2, 16, QChar('0')).toUpper());
|
||||||
|
if(hexEdit.exec() != QDialog::Accepted)
|
||||||
|
return;
|
||||||
|
QString pattern = hexEdit.mHexEdit->pattern();
|
||||||
|
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;
|
||||||
|
hexEdit.mHexEdit->fill(0, QString(pattern));
|
||||||
|
QByteArray patched(hexEdit.mHexEdit->data());
|
||||||
|
mMemPage->write(patched, selStart, patched.size());
|
||||||
|
reloadData();
|
||||||
|
}
|
||||||
|
|
||||||
void CPUStack::binaryCopySlot()
|
void CPUStack::binaryCopySlot()
|
||||||
{
|
{
|
||||||
HexEditDialog hexEdit(this);
|
HexEditDialog hexEdit(this);
|
||||||
|
|
|
@ -32,6 +32,7 @@ public slots:
|
||||||
void followDumpSlot();
|
void followDumpSlot();
|
||||||
void followStackSlot();
|
void followStackSlot();
|
||||||
void binaryEditSlot();
|
void binaryEditSlot();
|
||||||
|
void binaryFillSlot();
|
||||||
void binaryCopySlot();
|
void binaryCopySlot();
|
||||||
void binaryPasteSlot();
|
void binaryPasteSlot();
|
||||||
|
|
||||||
|
@ -40,6 +41,7 @@ private:
|
||||||
|
|
||||||
QMenu* mBinaryMenu;
|
QMenu* mBinaryMenu;
|
||||||
QAction* mBinaryEditAction;
|
QAction* mBinaryEditAction;
|
||||||
|
QAction* mBinaryFillAction;
|
||||||
QAction* mBinaryCopyAction;
|
QAction* mBinaryCopyAction;
|
||||||
QAction* mBinaryPasteAction;
|
QAction* mBinaryPasteAction;
|
||||||
QAction* mGotoSp;
|
QAction* mGotoSp;
|
||||||
|
|
Loading…
Reference in New Issue