mirror of
https://github.com/rizinorg/cutter.git
synced 2025-01-31 08:37:26 +00:00
* Add relro in the dashboard #105
This commit is contained in:
parent
6c8adef74b
commit
76bc053a8c
@ -18,10 +18,11 @@ AnalThread::~AnalThread()
|
||||
}
|
||||
}
|
||||
|
||||
void AnalThread::start(IaitoRCore *core, int level)
|
||||
void AnalThread::start(IaitoRCore *core, int level, QList<QString> advanced)
|
||||
{
|
||||
this->core = core;
|
||||
this->level = level;
|
||||
this->advanced = advanced;
|
||||
|
||||
QThread::start();
|
||||
}
|
||||
@ -30,5 +31,5 @@ void AnalThread::start(IaitoRCore *core, int level)
|
||||
void AnalThread::run()
|
||||
{
|
||||
//qDebug() << "Anal level: " << this->level;
|
||||
core->analyze(this->level);
|
||||
core->analyze(this->level, this->advanced);
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ public:
|
||||
explicit AnalThread(QWidget *parent = 0);
|
||||
~AnalThread();
|
||||
|
||||
void start(IaitoRCore *core, int level);
|
||||
void start(IaitoRCore *core, int level, QList<QString> advanced);
|
||||
|
||||
protected:
|
||||
void run();
|
||||
@ -22,6 +22,7 @@ protected:
|
||||
private:
|
||||
IaitoRCore *core;
|
||||
int level;
|
||||
QList<QString> advanced;
|
||||
};
|
||||
|
||||
#endif // ANALTHREAD_H
|
||||
|
@ -191,7 +191,7 @@ public:
|
||||
void setOptions(QString key);
|
||||
bool loadFile(QString path, uint64_t loadaddr = 0LL, uint64_t mapaddr = 0LL, bool rw = false, int va = 0, int idx = 0, bool loadbin = false);
|
||||
bool tryFile(QString path, bool rw);
|
||||
void analyze(int level);
|
||||
void analyze(int level, QList<QString> advanced);
|
||||
void seek(QString addr);
|
||||
void seek(ut64 offset);
|
||||
ut64 math(const QString &expr);
|
||||
|
@ -286,17 +286,17 @@ void MainWindow::initUI()
|
||||
connect(refresh_shortcut, SIGNAL(activated()), this, SLOT(refreshVisibleDockWidgets()));
|
||||
}
|
||||
|
||||
void MainWindow::openFile(const QString &fn, int anal_level)
|
||||
void MainWindow::openFile(const QString &fn, int anal_level, QList<QString> advanced)
|
||||
{
|
||||
QString project_name = qhelpers::uniqueProjectName(fn);
|
||||
|
||||
if (core->getProjectNames().contains(project_name))
|
||||
openProject(project_name);
|
||||
else
|
||||
openNewFile(fn, anal_level);
|
||||
openNewFile(fn, anal_level, advanced);
|
||||
}
|
||||
|
||||
void MainWindow::openNewFile(const QString &fn, int anal_level)
|
||||
void MainWindow::openNewFile(const QString &fn, int anal_level, QList<QString> advanced)
|
||||
{
|
||||
setFilename(fn);
|
||||
|
||||
@ -305,7 +305,7 @@ void MainWindow::openNewFile(const QString &fn, int anal_level)
|
||||
o->show();
|
||||
|
||||
if (anal_level >= 0)
|
||||
o->setupAndStartAnalysis(anal_level);
|
||||
o->setupAndStartAnalysis(anal_level, advanced);
|
||||
}
|
||||
|
||||
void MainWindow::openProject(const QString &project_name)
|
||||
|
@ -54,7 +54,7 @@ public:
|
||||
explicit MainWindow(QWidget *parent = 0);
|
||||
~MainWindow();
|
||||
|
||||
void openFile(const QString &fn, int anal_level = -1);
|
||||
void openFile(const QString &fn, int anal_level = -1, QList<QString> advanced = QList<QString>());
|
||||
void initUI();
|
||||
void finalizeOpen();
|
||||
|
||||
@ -210,7 +210,7 @@ private:
|
||||
RVA cursor_address;
|
||||
|
||||
void openProject(const QString &project_name);
|
||||
void openNewFile(const QString &fn, int anal_level);
|
||||
void openNewFile(const QString &fn, int anal_level, QList<QString> advanced);
|
||||
|
||||
void toggleDockWidget(DockWidget *dock_widget);
|
||||
|
||||
|
@ -17,7 +17,7 @@ OptionsDialog::OptionsDialog(MainWindow *main):
|
||||
ui(new Ui::OptionsDialog),
|
||||
analThread(this),
|
||||
main(main),
|
||||
defaultAnalLevel(3)
|
||||
defaultAnalLevel(1)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint));
|
||||
@ -41,6 +41,7 @@ OptionsDialog::OptionsDialog(MainWindow *main):
|
||||
ui->spacyCheckBox->setChecked(settings.value("bbline").toBool());
|
||||
|
||||
ui->hideFrame->setVisible(false);
|
||||
ui->analoptionsFrame->setVisible(false);
|
||||
|
||||
// Add this so the dialog resizes when widgets are shown/hidden
|
||||
//this->layout()->setSizeConstraint(QLayout::SetFixedSize);
|
||||
@ -57,7 +58,7 @@ OptionsDialog::~OptionsDialog()
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void OptionsDialog::setupAndStartAnalysis(int level)
|
||||
void OptionsDialog::setupAndStartAnalysis(int level, QList<QString> advanced)
|
||||
{
|
||||
ui->analSlider->setValue(level);
|
||||
|
||||
@ -143,7 +144,7 @@ void OptionsDialog::setupAndStartAnalysis(int level)
|
||||
// Threads stuff
|
||||
// connect signal/slot
|
||||
|
||||
analThread.start(main->core, level);
|
||||
analThread.start(main->core, level, advanced);
|
||||
}
|
||||
|
||||
void OptionsDialog::on_closeButton_clicked()
|
||||
@ -153,7 +154,44 @@ void OptionsDialog::on_closeButton_clicked()
|
||||
|
||||
void OptionsDialog::on_okButton_clicked()
|
||||
{
|
||||
setupAndStartAnalysis(ui->analSlider->value());
|
||||
QList<QString> advanced = QList<QString>();
|
||||
if (ui->analSlider->value() == 3){
|
||||
if (ui->aa_symbols->isChecked()){
|
||||
advanced << "aa";
|
||||
}
|
||||
if (ui->aar_references->isChecked()){
|
||||
advanced << "aar";
|
||||
}
|
||||
if (ui->aac_calls->isChecked()){
|
||||
advanced << "aac";
|
||||
}
|
||||
if (ui->aan_rename->isChecked()){
|
||||
advanced << "aan";
|
||||
}
|
||||
if (ui->aae_emulate->isChecked()){
|
||||
advanced << "aae";
|
||||
}
|
||||
if (ui->aat_consecutive->isChecked()){
|
||||
advanced << "aat";
|
||||
}
|
||||
if (ui->afta_typeargument->isChecked()){
|
||||
advanced << "afta";
|
||||
}
|
||||
if (ui->aaT_aftertrap->isChecked()){
|
||||
advanced << "aaT";
|
||||
}
|
||||
if (ui->aap_preludes->isChecked()){
|
||||
advanced << "aap";
|
||||
}
|
||||
if (ui->jmptbl->isChecked()){
|
||||
advanced << "e! anal.jmptbl";
|
||||
}
|
||||
if (ui->pushret->isChecked()){
|
||||
advanced << "e! anal.pushret";
|
||||
}
|
||||
}
|
||||
|
||||
setupAndStartAnalysis(ui->analSlider->value(), advanced);
|
||||
}
|
||||
|
||||
void OptionsDialog::anal_finished()
|
||||
@ -192,15 +230,13 @@ QString OptionsDialog::analysisDescription(int level)
|
||||
switch (level)
|
||||
{
|
||||
case 0:
|
||||
return tr("-");
|
||||
return tr("No analysis");
|
||||
case 1:
|
||||
return tr("Minimum");
|
||||
return tr("Auto-Analysis (aaa)");
|
||||
case 2:
|
||||
return tr("Basic");
|
||||
return tr("Auto-Analysis Experimental (aaaa)");
|
||||
case 3:
|
||||
return tr("Medium");
|
||||
case 4:
|
||||
return tr("Full <font color='red'><b>(Experimental)</b></font>");
|
||||
return tr("Advanced");
|
||||
default:
|
||||
return tr("Unknown");
|
||||
}
|
||||
@ -218,6 +254,14 @@ void OptionsDialog::on_analSlider_valueChanged(int value)
|
||||
{
|
||||
ui->analCheckBox->setChecked(true);
|
||||
ui->analCheckBox->setText("Analysis: Enabled");
|
||||
if (value==3)
|
||||
{
|
||||
ui->analoptionsFrame->setVisible(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->analoptionsFrame->setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ public:
|
||||
RAnalFunction functionAt(ut64 addr);
|
||||
QStringList asm_plugins;
|
||||
|
||||
void setupAndStartAnalysis(int level);
|
||||
void setupAndStartAnalysis(int level, QList<QString> advanced);
|
||||
|
||||
private slots:
|
||||
void on_closeButton_clicked();
|
||||
|
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>414</width>
|
||||
<height>657</height>
|
||||
<width>576</width>
|
||||
<height>1167</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@ -188,10 +188,20 @@
|
||||
<number>5</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<property name="spacing">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetDefaultConstraint</enum>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="analCheckBox">
|
||||
<property name="sizePolicy">
|
||||
@ -214,13 +224,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="analDescription">
|
||||
<property name="sizePolicy">
|
||||
@ -248,7 +251,7 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>4</number>
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>1</number>
|
||||
@ -267,6 +270,132 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QFrame" name="analoptionsFrame">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="aa_symbols">
|
||||
<property name="text">
|
||||
<string>Analyze all symbols (aa)</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="aar_references">
|
||||
<property name="text">
|
||||
<string>Analyze for references (aar)</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="aac_calls">
|
||||
<property name="text">
|
||||
<string>Analyze function calls (aac)</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="aan_rename">
|
||||
<property name="text">
|
||||
<string>Autorename functions based on context (aan)</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Experimental:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="aae_emulate">
|
||||
<property name="text">
|
||||
<string>Emulate code to find computed references (aae)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="aat_consecutive">
|
||||
<property name="text">
|
||||
<string>Analyze for consecutive function (aat)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="afta_typeargument">
|
||||
<property name="text">
|
||||
<string>Type and Argument matching analysis (afta)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="aaT_aftertrap">
|
||||
<property name="text">
|
||||
<string>Analyze code after trap-sleds (aaT)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="aap_preludes">
|
||||
<property name="text">
|
||||
<string>Analyze function preludes (aap)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="jmptbl">
|
||||
<property name="text">
|
||||
<string>Analyze jump tables in switch statements (e! anal.jmptbl)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="pushret">
|
||||
<property name="text">
|
||||
<string>Analyze push+ret as jmp (e! anal.pushret)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
@ -289,6 +418,9 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(255, 255, 255);
|
||||
color: rgb(0, 0, 0);</string>
|
||||
|
@ -292,32 +292,28 @@ bool IaitoRCore::loadFile(QString path, uint64_t loadaddr, uint64_t mapaddr, boo
|
||||
return true;
|
||||
}
|
||||
|
||||
void IaitoRCore::analyze(int level)
|
||||
void IaitoRCore::analyze(int level, QList<QString> advanced)
|
||||
{
|
||||
CORE_LOCK();
|
||||
/*
|
||||
* Levels
|
||||
* Nivel 1: afr @ entry0 y main (afr@entry0;afr@main)
|
||||
* Nivel 2: aa
|
||||
* Nivel 3: aaa
|
||||
* Nivel 4: aaaa
|
||||
* Nivel 1: aaa
|
||||
* Nivel 2: aaaa
|
||||
*/
|
||||
|
||||
if (level == 1)
|
||||
{
|
||||
r_core_cmd0(core_, "afr@entry0;afr@main");
|
||||
r_core_cmd0(core_, "aaa");
|
||||
}
|
||||
else if (level == 2)
|
||||
{
|
||||
r_core_cmd0(core_, "aa");
|
||||
r_core_cmd0(core_, "aaaa");
|
||||
}
|
||||
else if (level == 3)
|
||||
{
|
||||
r_core_cmd0(core_, "aaa");
|
||||
foreach(QString option, advanced){
|
||||
r_core_cmd0(core_, option.toStdString().c_str());
|
||||
}
|
||||
else if (level == 4)
|
||||
{
|
||||
r_core_cmd0(core_, "aaaa");
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user