Added hex flag

This commit is contained in:
Rohan-Sagar 2024-02-14 12:41:06 -05:00
parent f97ab44072
commit 330803db99
6 changed files with 65 additions and 3 deletions

View File

@ -1,12 +1,13 @@
#include "CommentsDialog.h"
#include "ui_CommentsDialog.h"
#include <iostream>
#include <QErrorMessage>
#include "core/Cutter.h"
CommentsDialog::CommentsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::CommentsDialog)
{
std::cout << "Comments dialog parent object name" << " " << parent->objectName().toStdString() << std::endl;
ui->setupUi(this);
setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint));

View File

@ -2,15 +2,20 @@
#include "ui_FlagDialog.h"
#include <QIntValidator>
#include <iostream>
#include "core/Cutter.h"
FlagDialog::FlagDialog(RVA offset, QWidget *parent)
: QDialog(parent), ui(new Ui::FlagDialog), offset(offset), flagName(""), flagOffset(RVA_INVALID)
{
std::cout << "offset" << " " << offset << std::endl;
std::cout << "parent" << " " << parent << std::endl;
std::cout << "parentObjectName" << " " << parent->objectName().toStdString() << std::endl;
// Setup UI
ui->setupUi(this);
setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint));
RzFlagItem *flag = rz_flag_get_i(Core()->core()->flags, offset);
std::cout << "flag" << " " << flag << std::endl;
if (flag) {
flagName = QString(flag->name);
flagOffset = flag->offset;
@ -23,6 +28,7 @@ FlagDialog::FlagDialog(RVA offset, QWidget *parent)
ui->nameEdit->setText(flag->name);
ui->labelAction->setText(tr("Edit flag at %1").arg(RzAddressString(offset)));
} else {
std::cout << "offset in if condition" << " " << offset << std::endl;
ui->labelAction->setText(tr("Add flag at %1").arg(RzAddressString(offset)));
}
@ -37,6 +43,7 @@ void FlagDialog::buttonBoxAccepted()
{
RVA size = ui->sizeEdit->text().toULongLong();
QString name = ui->nameEdit->text();
std::cout << "name" << " " << name.toStdString() << std::endl;
if (name.isEmpty()) {
if (flagOffset != RVA_INVALID) {
@ -52,6 +59,7 @@ void FlagDialog::buttonBoxAccepted()
} else {
// Name provided and flag does not exist -> create the flag
Core()->addFlag(offset, name, size);
std::cout << "Adding flag" << std::endl;
}
}
close();

View File

@ -11,7 +11,7 @@
#include "dialogs/EditStringDialog.h"
#include "dialogs/BreakpointsDialog.h"
#include "MainWindow.h"
#include <iostream>
#include <QtCore>
#include <QShortcut>
#include <QJsonArray>

View File

@ -3,6 +3,8 @@
#include "Configuration.h"
#include "dialogs/WriteCommandsDialogs.h"
#include "dialogs/CommentsDialog.h"
#include "dialogs/FlagDialog.h"
#include <iostream>
#include <QPainter>
#include <QPaintEvent>
@ -50,7 +52,6 @@ HexWidget::HexWidget(QWidget *parent)
setFocusPolicy(Qt::FocusPolicy::StrongFocus);
connect(horizontalScrollBar(), &QScrollBar::valueChanged, this,
[this]() { viewport()->update(); });
connect(Config(), &Configuration::colorsUpdated, this, &HexWidget::updateColors);
connect(Config(), &Configuration::fontsUpdated, this,
[this]() { setMonospaceFont(Config()->getFont()); });
@ -137,6 +138,21 @@ HexWidget::HexWidget(QWidget *parent)
&HexWidget::onActionDeleteCommentTriggered);
addAction(actionDeleteComment);
// Flag Option - Rohan
// Add flag option
actionFlag = new QAction(tr("Add Flag"), this);
actionFlag->setShortcutContext(Qt::ShortcutContext::WidgetWithChildrenShortcut);
actionFlag->setShortcut(Qt::Key_N);
connect(actionFlag, &QAction::triggered, this, &HexWidget::onActionAddFlagTriggered);
addAction(actionFlag);
// Delete flag option
actionDeleteFlag = new QAction(tr("Delete Flag"), this);
actionDeleteFlag->setShortcutContext(Qt::ShortcutContext::WidgetWithChildrenShortcut);
connect(actionDeleteFlag, &QAction::triggered, this,
&HexWidget::onActionDeleteFlagTriggered);
addAction(actionDeleteFlag);
actionSelectRange = new QAction(tr("Select range"), this);
connect(actionSelectRange, &QAction::triggered, this,
[this]() { rangeDialog.open(cursor.address); });
@ -214,6 +230,11 @@ HexWidget::HexWidget(QWidget *parent)
connect(&warningTimer, &QTimer::timeout, this, &HexWidget::hideWarningRect);
}
QWidget *HexWidget::parentForDialog()
{
return parentWidget();
}
void HexWidget::setMonospaceFont(const QFont &font)
{
if (!(font.styleHint() & QFont::Monospace)) {
@ -1160,6 +1181,17 @@ void HexWidget::contextMenuEvent(QContextMenuEvent *event)
actionComment->setText(tr("Edit Comment"));
}
QString flag = Core()->flagAt(cursor.address);
std::cout << "Flag at " << std::hex << cursor.address << " is " << flag.toStdString() << std::endl;
if (flag.isNull() || flag.isEmpty()) {
actionDeleteFlag->setVisible(false);
actionFlag->setText(tr("Add Flag"));
} else {
actionDeleteFlag->setVisible(true);
actionFlag->setText(tr("Edit Flag"));
}
if (!ioModesController.canWrite()) {
actionKeyboardEdit->setChecked(false);
}
@ -1233,6 +1265,21 @@ void HexWidget::onActionAddCommentTriggered()
CommentsDialog::addOrEditComment(addr, this);
}
void HexWidget::onActionAddFlagTriggered()
{
uint64_t addr = cursor.address;
std::cout << "Add flag at " << std::hex << addr << std::endl;
FlagDialog dialog(addr, this);
dialog.exec();
}
// slot for deleting flag action
void HexWidget::onActionDeleteFlagTriggered()
{
uint64_t addr = cursor.address;
Core()->delFlag(addr);
}
// slot for deleting comment action
void HexWidget::onActionDeleteCommentTriggered()
{

View File

@ -382,6 +382,8 @@ private slots:
void copyAddress();
void onRangeDialogAccepted();
void onActionAddCommentTriggered();
void onActionAddFlagTriggered();
void onActionDeleteFlagTriggered();
void onActionDeleteCommentTriggered();
// Write command slots
@ -424,6 +426,7 @@ private:
QString renderItem(int offset, QColor *color = nullptr);
QChar renderAscii(int offset, QColor *color = nullptr);
QString getFlagsAndComment(uint64_t address);
QWidget *parentForDialog();
/**
* @brief Get the location on which operations such as Writing should apply.
* @return Start of selection if multiple bytes are selected. Otherwise, the curren seek of the
@ -576,6 +579,8 @@ private:
QAction *actionCopy;
QAction *actionCopyAddress;
QAction *actionComment;
QAction *actionFlag;
QAction *actionDeleteFlag;
QAction *actionDeleteComment;
QAction *actionSelectRange;
QAction *actionKeyboardEdit;

View File

@ -34,6 +34,7 @@ public:
Highlighter *highlighter;
static QString getWidgetType();
QWidget *parentForDialog();
public slots:
void initParsing();