cutter/src/analthread.cpp

89 lines
2.0 KiB
C++
Raw Normal View History

#include <QDebug>
#include "ui_optionsdialog.h"
2017-09-25 12:55:41 +00:00
#include "cutter.h"
#include "analthread.h"
#include "mainwindow.h"
#include "settings.h"
#include "optionsdialog.h"
AnalThread::AnalThread(OptionsDialog *parent) :
QThread(parent),
main(nullptr),
level(2)
{
}
AnalThread::~AnalThread()
{
2017-04-09 19:55:06 +00:00
if (isRunning())
{
quit();
wait();
}
}
void AnalThread::start(MainWindow *main, int level, QList<QString> advanced)
{
this->level = level;
this->advanced = advanced;
this->main = main;
QThread::start();
}
// run() will be called when a thread starts
void AnalThread::run()
{
const auto optionsDialog = dynamic_cast<OptionsDialog *>(parent());
const auto ui = optionsDialog->ui;
int va = ui->vaCheckBox->isChecked();
ut64 loadaddr = 0LL;
ut64 mapaddr = 0LL;
//
// Advanced Options
//
main->core->setCPU(optionsDialog->getSelectedArch(), optionsDialog->getSelectedCPU(), optionsDialog->getSelectedBits());
bool rw = false;
bool load_bininfo = ui->binCheckBox->isChecked();
if (load_bininfo)
{
if (!va)
{
va = 2;
loadaddr = UT64_MAX;
r_config_set_i(main->core->core()->config, "bin.laddr", loadaddr);
mapaddr = 0;
}
}
else
{
va = false;
loadaddr = mapaddr = 0;
}
emit updateProgress(tr("Loading binary"));
// options dialog should show the list of archs inside the given fatbin
int binidx = 0; // index of subbin
main->core->loadFile(main->getFilename(), loadaddr, mapaddr, rw, va, binidx, load_bininfo);
emit updateProgress("Analysis in progress.");
QString os = optionsDialog->getSelectedOS();
if (!os.isNull())
{
main->core->cmd("e asm.os=" + os);
}
if (ui->pdbCheckBox->isChecked())
{
main->core->loadPDB(ui->pdbLineEdit->text());
}
//qDebug() << "Anal level: " << this->level;
main->core->analyze(this->level, this->advanced);
}