/
githubmirror
/
x64dbg
Обзор
Документация
Войти
/
githubmirror
/
x64dbg
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
development
src/cross/minidump/MainWindow.cpp
157 строк
4 KB
Duncan Ogilvie
Implement generic QDarkApplication with Fusion style and dark title bar
24 июл 2026, 17:24
24 июл 2026, 17:24
fb1b1e8
Код
Авторство
О чём код?
#include "MainWindow.h" #include "./ui_MainWindow.h" #include <QDebug> #include <QMessageBox> #include <QVBoxLayout> #include <QFileDialog> #include "StringUtil.h" MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); setupNavigation(); setupWidgets(); setupToolSync(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::closeEvent(QCloseEvent* event) { mToolSync->disconnect(); QMainWindow::closeEvent(event); } void MainWindow::on_actionLoad_DMP_triggered() { auto dumpFile = QFileDialog::getOpenFileName(this, "Load dump", QString(), "Dump Files (*.dmp *.exe *.dll *.sys)"); if(!dumpFile.isEmpty()) { loadFile(dumpFile); } } void MainWindow::loadFile(const QString & path) { QFile file(path); if(!file.open(QIODevice::ReadOnly)) { QMessageBox::critical(this, "Error", "Failed to open dump file"); return; } mDumpData.resize(file.size()); file.read((char*)mDumpData.data(), mDumpData.size()); std::string error; mParser = FileParser::Create(mDumpData.data(), mDumpData.data() + mDumpData.size(), error); if(!mParser) { QMessageBox::critical(this, "Error", QString::fromStdString(error)); return; } // Reload the views auto parser = mParser.get(); mMemoryMap->loadFileParser(parser); mHexDump->loadFileParser(parser); mDisassembly->loadFileParser(parser); mThreads->loadThreads(parser->Threads()); // Disassemble at the entry point auto entryPoint = parser->entryPoint(); if(entryPoint != 0) { // Initialize both address-based views while leaving Disassembly active. emit mNavigation->gotoDump(entryPoint); emit mNavigation->gotoDisassembly(entryPoint); } } void MainWindow::setupNavigation() { mNavigation = new Navigation(this); connect(mNavigation, &Navigation::focusWindow, [this](Navigation::Window window) { switch(window) { case Navigation::Dump: ui->tabWidget->setCurrentWidget(mHexDump); break; case Navigation::Disassembly: ui->tabWidget->setCurrentWidget(mDisassembly); break; case Navigation::MemoryMap: ui->tabWidget->setCurrentWidget(mMemoryMap); break; default: qDebug() << "Unknown window: " << window; break; } }); connect(mNavigation, &Navigation::gotoAddress, [this](Navigation::Window window, duint address) { switch(window) { case Navigation::Dump: mHexDump->printDumpAt(address); break; case Navigation::Disassembly: mDisassembly->disassembleAt(address, true, -1); break; case Navigation::MemoryMap: mMemoryMap->gotoAddress(address); break; default: qDebug() << "Unknown window: " << window; break; } }); } void MainWindow::setupWidgets() { mMemoryMap = new MiniMemoryMap(mNavigation, this); ui->tabWidget->addTab(mMemoryMap, "Memory Map"); mHexDump = new MiniHexDump(mNavigation, GlobalArchitecture(), this); ui->tabWidget->addTab(mHexDump, "Dump"); mDisassembly = new MiniDisassembly(mNavigation, GlobalArchitecture(), this); ui->tabWidget->addTab(mDisassembly, "Disassembly"); mThreads = new MiniThreads(this); ui->tabWidget->addTab(mThreads, "Threads"); } void MainWindow::setupToolSync() { mToolSync = new REToolSync(this); connect(mToolSync, &REToolSync::info, [](QString message) { qDebug() << "REToolSync info: " + message; }); connect(mToolSync, &REToolSync::error, [](QString message) { qDebug() << "REToolSync error: " + message; }); connect(mToolSync, &REToolSync::gotoAddress, this, [this](duint address) { qDebug() << "REToolSync goto: " + ToPtrString(address); emit mNavigation->gotoAddress(Navigation::Dump, address); emit mNavigation->gotoAddress(Navigation::MemoryMap, address); emit mNavigation->gotoAddress(Navigation::Disassembly, address); }); #ifndef Q_OS_WASM if(!mToolSync->connect("http://localhost:6969")) { qDebug() << "Failed to connect to REToolSync"; } #endif }