mirror of
https://github.com/rizinorg/cutter.git
synced 2024-12-18 19:06:10 +00:00
parent
c8d8e667fb
commit
99b1fde47d
@ -856,6 +856,29 @@ QList<RegisterRefDescription> CutterCore::getRegisterRefs()
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<VariableDescription> CutterCore::getVariables(RVA at)
|
||||||
|
{
|
||||||
|
QList<VariableDescription> ret;
|
||||||
|
QJsonObject varsObject = cmdj(QString("afvj @ %1").arg(at)).object();
|
||||||
|
|
||||||
|
auto addVars = [&](VariableDescription::RefType refType, const QJsonArray &array) {
|
||||||
|
for (const QJsonValue &varValue : array) {
|
||||||
|
QJsonObject varObject = varValue.toObject();
|
||||||
|
VariableDescription desc;
|
||||||
|
desc.refType = refType;
|
||||||
|
desc.name = varObject["name"].toString();
|
||||||
|
desc.type = varObject["type"].toString();
|
||||||
|
ret << desc;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
addVars(VariableDescription::RefType::SP, varsObject["sp"].toArray());
|
||||||
|
addVars(VariableDescription::RefType::BP, varsObject["bp"].toArray());
|
||||||
|
addVars(VariableDescription::RefType::Reg, varsObject["reg"].toArray());
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
QJsonObject CutterCore::getRegisterJson()
|
QJsonObject CutterCore::getRegisterJson()
|
||||||
{
|
{
|
||||||
QJsonArray registerRefArray = cmdj("drrj").array();
|
QJsonArray registerRefArray = cmdj("drrj").array();
|
||||||
|
@ -332,6 +332,13 @@ struct RegisterRefDescription {
|
|||||||
QString ref;
|
QString ref;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct VariableDescription {
|
||||||
|
enum class RefType { SP, BP, Reg };
|
||||||
|
RefType refType;
|
||||||
|
QString name;
|
||||||
|
QString type;
|
||||||
|
};
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(FunctionDescription)
|
Q_DECLARE_METATYPE(FunctionDescription)
|
||||||
Q_DECLARE_METATYPE(ImportDescription)
|
Q_DECLARE_METATYPE(ImportDescription)
|
||||||
Q_DECLARE_METATYPE(ExportDescription)
|
Q_DECLARE_METATYPE(ExportDescription)
|
||||||
@ -365,6 +372,7 @@ Q_DECLARE_METATYPE(MemoryMapDescription)
|
|||||||
Q_DECLARE_METATYPE(BreakpointDescription)
|
Q_DECLARE_METATYPE(BreakpointDescription)
|
||||||
Q_DECLARE_METATYPE(ProcessDescription)
|
Q_DECLARE_METATYPE(ProcessDescription)
|
||||||
Q_DECLARE_METATYPE(RegisterRefDescription)
|
Q_DECLARE_METATYPE(RegisterRefDescription)
|
||||||
|
Q_DECLARE_METATYPE(VariableDescription)
|
||||||
|
|
||||||
class CutterCore: public QObject
|
class CutterCore: public QObject
|
||||||
{
|
{
|
||||||
@ -604,6 +612,7 @@ public:
|
|||||||
QList<ProcessDescription> getAllProcesses();
|
QList<ProcessDescription> getAllProcesses();
|
||||||
QList<RegisterRefDescription> getRegisterRefs();
|
QList<RegisterRefDescription> getRegisterRefs();
|
||||||
QJsonObject getRegisterJson();
|
QJsonObject getRegisterJson();
|
||||||
|
QList<VariableDescription> getVariables(RVA at);
|
||||||
|
|
||||||
QList<XrefDescription> getXRefs(RVA addr, bool to, bool whole_function,
|
QList<XrefDescription> getXRefs(RVA addr, bool to, bool whole_function,
|
||||||
const QString &filterType = QString::null);
|
const QString &filterType = QString::null);
|
||||||
|
@ -214,7 +214,7 @@ SOURCES += \
|
|||||||
dialogs/AttachProcDialog.cpp \
|
dialogs/AttachProcDialog.cpp \
|
||||||
widgets/RegisterRefsWidget.cpp \
|
widgets/RegisterRefsWidget.cpp \
|
||||||
dialogs/SetToDataDialog.cpp \
|
dialogs/SetToDataDialog.cpp \
|
||||||
dialogs/SetFunctionVarTypes.cpp \
|
dialogs/EditVariablesDialog.cpp \
|
||||||
widgets/ColorSchemePrefWidget.cpp \
|
widgets/ColorSchemePrefWidget.cpp \
|
||||||
common/ColorSchemeFileSaver.cpp \
|
common/ColorSchemeFileSaver.cpp \
|
||||||
dialogs/EditFunctionDialog.cpp \
|
dialogs/EditFunctionDialog.cpp \
|
||||||
@ -318,7 +318,7 @@ HEADERS += \
|
|||||||
widgets/RegisterRefsWidget.h \
|
widgets/RegisterRefsWidget.h \
|
||||||
dialogs/SetToDataDialog.h \
|
dialogs/SetToDataDialog.h \
|
||||||
common/InitialOptions.h \
|
common/InitialOptions.h \
|
||||||
dialogs/SetFunctionVarTypes.h \
|
dialogs/EditVariablesDialog.h \
|
||||||
common/ColorSchemeFileSaver.h \
|
common/ColorSchemeFileSaver.h \
|
||||||
widgets/ColorSchemePrefWidget.h \
|
widgets/ColorSchemePrefWidget.h \
|
||||||
dialogs/EditFunctionDialog.h \
|
dialogs/EditFunctionDialog.h \
|
||||||
@ -380,7 +380,7 @@ FORMS += \
|
|||||||
dialogs/AttachProcDialog.ui \
|
dialogs/AttachProcDialog.ui \
|
||||||
widgets/RegisterRefsWidget.ui \
|
widgets/RegisterRefsWidget.ui \
|
||||||
dialogs/SetToDataDialog.ui \
|
dialogs/SetToDataDialog.ui \
|
||||||
dialogs/SetFunctionVarTypes.ui \
|
dialogs/EditVariablesDialog.ui \
|
||||||
widgets/ColorSchemePrefWidget.ui \
|
widgets/ColorSchemePrefWidget.ui \
|
||||||
widgets/CutterTreeView.ui \
|
widgets/CutterTreeView.ui \
|
||||||
widgets/ComboQuickFilterView.ui \
|
widgets/ComboQuickFilterView.ui \
|
||||||
|
76
src/dialogs/EditVariablesDialog.cpp
Normal file
76
src/dialogs/EditVariablesDialog.cpp
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
#include "EditVariablesDialog.h"
|
||||||
|
#include "ui_EditVariablesDialog.h"
|
||||||
|
|
||||||
|
#include <QMetaType>
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QMetaType>
|
||||||
|
|
||||||
|
|
||||||
|
EditVariablesDialog::EditVariablesDialog(RVA offset, QWidget *parent) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::EditVariablesDialog)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(applyFields()));
|
||||||
|
connect(ui->dropdownLocalVars, SIGNAL(currentIndexChanged(int)), SLOT(updateFields()));
|
||||||
|
|
||||||
|
QString fcnName = Core()->cmd(QString("afn @ %1").arg(offset)).trimmed();
|
||||||
|
setWindowTitle(tr("Set Variable Types for Function: %1").arg(fcnName));
|
||||||
|
|
||||||
|
variables = Core()->getVariables(offset);
|
||||||
|
for (const VariableDescription &var : variables) {
|
||||||
|
ui->dropdownLocalVars->addItem(var.name, QVariant::fromValue(var));
|
||||||
|
}
|
||||||
|
|
||||||
|
populateTypesComboBox();
|
||||||
|
updateFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditVariablesDialog::~EditVariablesDialog()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditVariablesDialog::applyFields()
|
||||||
|
{
|
||||||
|
VariableDescription desc = ui->dropdownLocalVars->currentData().value<VariableDescription>();
|
||||||
|
|
||||||
|
Core()->cmdRaw(QString("afvt %1 %2").arg(desc.name).arg(ui->typeComboBox->currentText()));
|
||||||
|
|
||||||
|
QString newName = ui->dropdownLocalVars->currentText().replace(" ", "_");
|
||||||
|
if (newName != desc.name) {
|
||||||
|
Core()->cmdRaw(QString("afvn %1 %2").arg(desc.name).arg(newName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditVariablesDialog::updateFields()
|
||||||
|
{
|
||||||
|
VariableDescription desc = ui->dropdownLocalVars->currentData().value<VariableDescription>();
|
||||||
|
ui->nameEdit->setText(desc.name);
|
||||||
|
ui->typeComboBox->setCurrentText(desc.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void EditVariablesDialog::populateTypesComboBox()
|
||||||
|
{
|
||||||
|
//gets all loaded types, structures and enums and puts them in a list
|
||||||
|
|
||||||
|
QStringList userStructures;
|
||||||
|
QStringList userEnumerations;
|
||||||
|
QList<TypeDescription> primitiveTypesTypeList;
|
||||||
|
|
||||||
|
userStructures = Core()->cmdList("ts");
|
||||||
|
ui->typeComboBox->addItems(userStructures);
|
||||||
|
ui->typeComboBox->insertSeparator(ui->typeComboBox->count());
|
||||||
|
|
||||||
|
primitiveTypesTypeList = Core()->getAllTypes();
|
||||||
|
|
||||||
|
for (const TypeDescription &thisType : primitiveTypesTypeList) {
|
||||||
|
ui->typeComboBox->addItem(thisType.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->typeComboBox->insertSeparator(ui->typeComboBox->count());
|
||||||
|
|
||||||
|
userEnumerations = Core()->cmdList("te");
|
||||||
|
ui->typeComboBox->addItems(userEnumerations);
|
||||||
|
}
|
30
src/dialogs/EditVariablesDialog.h
Normal file
30
src/dialogs/EditVariablesDialog.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#ifndef EDITVARIABLESDIALOG_H
|
||||||
|
#define EDITVARIABLESDIALOG_H
|
||||||
|
|
||||||
|
#include "Cutter.h"
|
||||||
|
#include <QDialog>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class EditVariablesDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class EditVariablesDialog : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit EditVariablesDialog(RVA offset, QWidget *parent = nullptr);
|
||||||
|
~EditVariablesDialog();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void applyFields();
|
||||||
|
void updateFields();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::EditVariablesDialog *ui;
|
||||||
|
QList<VariableDescription> variables;
|
||||||
|
|
||||||
|
void populateTypesComboBox();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // EDITVARIABLESDIALOG_H
|
105
src/dialogs/EditVariablesDialog.ui
Normal file
105
src/dialogs/EditVariablesDialog.ui
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>EditVariablesDialog</class>
|
||||||
|
<widget class="QDialog" name="EditVariablesDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>435</width>
|
||||||
|
<height>137</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Modify:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QComboBox" name="dropdownLocalVars"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="nameEdit"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="nameLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Name:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="labelSetTypeTo">
|
||||||
|
<property name="text">
|
||||||
|
<string>Type:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QComboBox" name="typeComboBox">
|
||||||
|
<property name="editable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="maxVisibleItems">
|
||||||
|
<number>15</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>EditVariablesDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>EditVariablesDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
@ -1,113 +0,0 @@
|
|||||||
#include "SetFunctionVarTypes.h"
|
|
||||||
#include "ui_SetFunctionVarTypes.h"
|
|
||||||
|
|
||||||
#include <QMetaType>
|
|
||||||
#include <QComboBox>
|
|
||||||
|
|
||||||
SetFunctionVarTypes::SetFunctionVarTypes(QWidget *parent) :
|
|
||||||
QDialog(parent),
|
|
||||||
ui(new Ui::SetFunctionVarTypes)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(on_OkPressed()));
|
|
||||||
connect(ui->dropdownLocalVars, SIGNAL(currentIndexChanged(QString)),
|
|
||||||
SLOT(on_ComboBoxChanged(QString)));
|
|
||||||
|
|
||||||
populateTypesComboBox();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
SetFunctionVarTypes::~SetFunctionVarTypes()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetFunctionVarTypes::setUserMessage(const QString userMessage)
|
|
||||||
{
|
|
||||||
ui->userMessage->setText(userMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetFunctionVarTypes::setFcn(RAnalFunction *fcn)
|
|
||||||
{
|
|
||||||
RListIter *iter;
|
|
||||||
RAnalVar *var;
|
|
||||||
|
|
||||||
if (fcn == nullptr) {
|
|
||||||
ui->userMessage->setText(tr("You must be in a function to define variable types."));
|
|
||||||
ui->labelSetTypeTo->setVisible(false);
|
|
||||||
ui->selectedTypeForVar->setVisible(false);
|
|
||||||
ui->dropdownLocalVars->setVisible(false);
|
|
||||||
|
|
||||||
this->validFcn = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ui->userMessage->setVisible(true);
|
|
||||||
ui->labelSetTypeTo->setVisible(true);
|
|
||||||
ui->selectedTypeForVar->setVisible(true);
|
|
||||||
ui->dropdownLocalVars->setVisible(true);
|
|
||||||
|
|
||||||
this->validFcn = true;
|
|
||||||
this->fcn = fcn;
|
|
||||||
this->fcnVars = r_anal_var_all_list(Core()->core()->anal, this->fcn);
|
|
||||||
|
|
||||||
for (iter = this->fcnVars->head; iter
|
|
||||||
&& (var = static_cast<RAnalVar *>(iter->data)); iter = iter->n) {
|
|
||||||
ui->dropdownLocalVars->addItem(var->name,
|
|
||||||
QVariant::fromValue(static_cast<void *>(var)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetFunctionVarTypes::on_OkPressed()
|
|
||||||
{
|
|
||||||
|
|
||||||
RAnalVar *selectedVar;
|
|
||||||
QVariant selectedVarVariant;
|
|
||||||
|
|
||||||
if (!this->validFcn) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
selectedVarVariant = ui->dropdownLocalVars->currentData();
|
|
||||||
selectedVar = static_cast<RAnalVar *>(selectedVarVariant.value<void *>());
|
|
||||||
|
|
||||||
Core()->cmd(QString("afvt %1 %2")
|
|
||||||
.arg(selectedVar->name)
|
|
||||||
.arg(ui->selectedTypeForVar->currentText()));
|
|
||||||
|
|
||||||
Core()->cmd(QString("afvn %1 %2")
|
|
||||||
.arg(ui->newVarName->text().replace(' ', '_'))
|
|
||||||
.arg(ui->dropdownLocalVars->currentText()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetFunctionVarTypes::on_ComboBoxChanged(QString varName)
|
|
||||||
{
|
|
||||||
ui->newVarName->setText(varName);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SetFunctionVarTypes::populateTypesComboBox()
|
|
||||||
{
|
|
||||||
//gets all loaded types, structures and enums and puts them in a list
|
|
||||||
|
|
||||||
QStringList userStructures;
|
|
||||||
QStringList userEnumerations;
|
|
||||||
QList<TypeDescription> primitiveTypesTypeList;
|
|
||||||
|
|
||||||
userStructures = Core()->cmdList("ts");
|
|
||||||
ui->selectedTypeForVar->addItems(userStructures);
|
|
||||||
ui->selectedTypeForVar->insertSeparator(ui->selectedTypeForVar->count());
|
|
||||||
|
|
||||||
primitiveTypesTypeList = Core()->getAllTypes();
|
|
||||||
|
|
||||||
for (const TypeDescription &thisType : primitiveTypesTypeList) {
|
|
||||||
ui->selectedTypeForVar->addItem(thisType.type);
|
|
||||||
}
|
|
||||||
|
|
||||||
ui->selectedTypeForVar->insertSeparator(ui->selectedTypeForVar->count());
|
|
||||||
|
|
||||||
userEnumerations = Core()->cmdList("te");
|
|
||||||
ui->selectedTypeForVar->addItems(userEnumerations);
|
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
#ifndef SETFUNCTIONVARTYPES_H
|
|
||||||
#define SETFUNCTIONVARTYPES_H
|
|
||||||
|
|
||||||
#include "Cutter.h"
|
|
||||||
#include <QDialog>
|
|
||||||
|
|
||||||
namespace Ui {
|
|
||||||
class SetFunctionVarTypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
class SetFunctionVarTypes : public QDialog
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit SetFunctionVarTypes(QWidget *parent = nullptr);
|
|
||||||
~SetFunctionVarTypes();
|
|
||||||
|
|
||||||
void setUserMessage(const QString userMessage);
|
|
||||||
void setFcn(RAnalFunction *fcn);
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void on_OkPressed();
|
|
||||||
void on_ComboBoxChanged(QString varName);
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
RList *fcnVars;
|
|
||||||
RAnalFunction *fcn;
|
|
||||||
Ui::SetFunctionVarTypes *ui;
|
|
||||||
bool validFcn;
|
|
||||||
void populateTypesComboBox();
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // SETFUNCTIONVARTYPES_H
|
|
@ -1,156 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>SetFunctionVarTypes</class>
|
|
||||||
<widget class="QDialog" name="SetFunctionVarTypes">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>636</width>
|
|
||||||
<height>327</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Dialog</string>
|
|
||||||
</property>
|
|
||||||
<widget class="QDialogButtonBox" name="buttonBox">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>10</x>
|
|
||||||
<y>290</y>
|
|
||||||
<width>621</width>
|
|
||||||
<height>32</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="standardButtons">
|
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QLabel" name="userMessage">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>20</x>
|
|
||||||
<y>10</y>
|
|
||||||
<width>601</width>
|
|
||||||
<height>17</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QComboBox" name="dropdownLocalVars">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>20</x>
|
|
||||||
<y>60</y>
|
|
||||||
<width>271</width>
|
|
||||||
<height>31</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QLabel" name="labelSetTypeTo">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>30</x>
|
|
||||||
<y>180</y>
|
|
||||||
<width>91</width>
|
|
||||||
<height>17</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Set Type To:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QComboBox" name="selectedTypeForVar">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>30</x>
|
|
||||||
<y>210</y>
|
|
||||||
<width>261</width>
|
|
||||||
<height>31</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="editable">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="maxVisibleItems">
|
|
||||||
<number>15</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>30</x>
|
|
||||||
<y>110</y>
|
|
||||||
<width>241</width>
|
|
||||||
<height>17</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Set Name To:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>20</x>
|
|
||||||
<y>30</y>
|
|
||||||
<width>67</width>
|
|
||||||
<height>17</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Modify:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QLineEdit" name="newVarName">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>30</x>
|
|
||||||
<y>140</y>
|
|
||||||
<width>261</width>
|
|
||||||
<height>31</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections>
|
|
||||||
<connection>
|
|
||||||
<sender>buttonBox</sender>
|
|
||||||
<signal>accepted()</signal>
|
|
||||||
<receiver>SetFunctionVarTypes</receiver>
|
|
||||||
<slot>accept()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>248</x>
|
|
||||||
<y>254</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>157</x>
|
|
||||||
<y>274</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>buttonBox</sender>
|
|
||||||
<signal>rejected()</signal>
|
|
||||||
<receiver>SetFunctionVarTypes</receiver>
|
|
||||||
<slot>reject()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>316</x>
|
|
||||||
<y>260</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>286</x>
|
|
||||||
<y>274</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
</connections>
|
|
||||||
</ui>
|
|
@ -5,7 +5,7 @@
|
|||||||
#include "dialogs/FlagDialog.h"
|
#include "dialogs/FlagDialog.h"
|
||||||
#include "dialogs/RenameDialog.h"
|
#include "dialogs/RenameDialog.h"
|
||||||
#include "dialogs/XrefsDialog.h"
|
#include "dialogs/XrefsDialog.h"
|
||||||
#include "dialogs/SetFunctionVarTypes.h"
|
#include "dialogs/EditVariablesDialog.h"
|
||||||
#include "dialogs/SetToDataDialog.h"
|
#include "dialogs/SetToDataDialog.h"
|
||||||
#include "dialogs/EditFunctionDialog.h"
|
#include "dialogs/EditFunctionDialog.h"
|
||||||
#include <QtCore>
|
#include <QtCore>
|
||||||
@ -640,20 +640,15 @@ void DisassemblyContextMenu::on_actionRenameUsedHere_triggered()
|
|||||||
|
|
||||||
void DisassemblyContextMenu::on_actionSetFunctionVarTypes_triggered()
|
void DisassemblyContextMenu::on_actionSetFunctionVarTypes_triggered()
|
||||||
{
|
{
|
||||||
SetFunctionVarTypes *dialog;
|
|
||||||
|
|
||||||
|
|
||||||
RAnalFunction *fcn = Core()->functionAt(offset);
|
RAnalFunction *fcn = Core()->functionAt(offset);
|
||||||
|
|
||||||
dialog = new SetFunctionVarTypes(this);
|
if (!fcn) {
|
||||||
|
QMessageBox::critical(this, tr("Re-type function local vars"), tr("You must be in a function to define variable types."));
|
||||||
if (fcn) {
|
return;
|
||||||
dialog->setWindowTitle(tr("Set Variable Types for Function: %1").arg(fcn->name));
|
|
||||||
}
|
}
|
||||||
dialog->setFcn(fcn);
|
|
||||||
|
|
||||||
dialog->exec();
|
|
||||||
|
|
||||||
|
EditVariablesDialog dialog(Core()->getOffset(), this);
|
||||||
|
dialog.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisassemblyContextMenu::on_actionXRefs_triggered()
|
void DisassemblyContextMenu::on_actionXRefs_triggered()
|
||||||
|
Loading…
Reference in New Issue
Block a user