#include #include "ui_optionsdialog.h" #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() { if (isRunning()) { quit(); wait(); } } void AnalThread::start(MainWindow *main, int level, QList 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(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); }