From 77d771d452f866e16e4e64d86ff14372cdedeb61 Mon Sep 17 00:00:00 2001 From: vit9696 Date: Sat, 15 Sep 2018 19:17:59 +0300 Subject: [PATCH] Rework external editor interface (formerly IDA interface) 1. External editor is supported for sections, not files 2. External editor is not visible when it is unspecified in prefs --- UEFITool/uefitool.cpp | 72 +++++++++++++++++++------------------------ UEFITool/uefitool.h | 13 ++++---- UEFITool/uefitool.ui | 30 +++++++++++------- common/basetypes.h | 4 +-- 4 files changed, 58 insertions(+), 61 deletions(-) diff --git a/UEFITool/uefitool.cpp b/UEFITool/uefitool.cpp index 8c40693..d922428 100644 --- a/UEFITool/uefitool.cpp +++ b/UEFITool/uefitool.cpp @@ -39,7 +39,8 @@ version(tr(PROGRAM_VERSION)) connect(ui->actionOpenImageFile, SIGNAL(triggered()), this, SLOT(openImageFile())); connect(ui->actionOpenImageFileInNewWindow, SIGNAL(triggered()), this, SLOT(openImageFileInNewWindow())); connect(ui->actionSaveImageFile, SIGNAL(triggered()), this, SLOT(saveImageFile())); - connect(ui->actionSpecifyPathIDA, SIGNAL(triggered()), this, SLOT(specifyPathIDA())); + connect(ui->actionSpecifyPathExternal32, SIGNAL(triggered()), this, SLOT(specifyPathExternalEditor32())); + connect(ui->actionSpecifyPathExternal64, SIGNAL(triggered()), this, SLOT(specifyPathExternalEditor64())); connect(ui->actionSearch, SIGNAL(triggered()), this, SLOT(search())); connect(ui->actionHexView, SIGNAL(triggered()), this, SLOT(hexView())); connect(ui->actionBodyHexView, SIGNAL(triggered()), this, SLOT(bodyHexView())); @@ -53,8 +54,8 @@ version(tr(PROGRAM_VERSION)) connect(ui->actionReplaceBody, SIGNAL(triggered()), this, SLOT(replaceBody())); connect(ui->actionRemove, SIGNAL(triggered()), this, SLOT(remove())); connect(ui->actionRebuild, SIGNAL(triggered()), this, SLOT(rebuild())); - connect(ui->actionInspectBodyIDA, SIGNAL(triggered()), this, SLOT(inspectIDA32())); - connect(ui->actionInspectBodyIDA64, SIGNAL(triggered()), this, SLOT(inspectIDA64())); + connect(ui->actionInspectExternal32, SIGNAL(triggered()), this, SLOT(inspectExternalEditor32())); + connect(ui->actionInspectExternal64, SIGNAL(triggered()), this, SLOT(inspectExternalEditor64())); connect(ui->actionMessagesCopy, SIGNAL(triggered()), this, SLOT(copyMessage())); connect(ui->actionMessagesCopyAll, SIGNAL(triggered()), this, SLOT(copyAllMessages())); connect(ui->actionMessagesClear, SIGNAL(triggered()), this, SLOT(clearMessages())); @@ -234,8 +235,8 @@ void UEFITool::populateUi(const UModelIndex ¤t) ui->actionExtractBody->setDisabled(model->hasEmptyBody(current)); ui->actionExtractBodyUncompressed->setEnabled(enableExtractBodyUncompressed(current)); - ui->actionInspectBodyIDA->setDisabled(model->hasEmptyBody(current)); - ui->actionInspectBodyIDA64->setDisabled(model->hasEmptyBody(current)); + ui->actionInspectExternal32->setVisible(type == Types::Section && !externalEditorPath32.isEmpty()); + ui->actionInspectExternal64->setVisible(type == Types::Section && !externalEditorPath64.isEmpty()); ui->actionRemove->setEnabled(type == Types::Volume || type == Types::File || type == Types::Section); //ui->actionInsertInto->setEnabled((type == Types::Volume && subtype != Subtypes::UnknownVolume) || @@ -728,26 +729,26 @@ void UEFITool::extract(const UINT8 mode, UString* pathOut) } } -void UEFITool::inspectIDA32() +void UEFITool::inspectExternalEditor32() { - if(idaPath32.trimmed().isEmpty()) - specifyPathIDA32(); + if(externalEditorPath32.trimmed().isEmpty()) + specifyPathExternalEditor32(); - inspect(INSPECT_MODE_IDA32); + inspect(INSPECT_MODE_EXTERNAL32); } -void UEFITool::inspectIDA64() +void UEFITool::inspectExternalEditor64() { - if(idaPath64.trimmed().isEmpty()) - specifyPathIDA64(); + if(externalEditorPath64.trimmed().isEmpty()) + specifyPathExternalEditor64(); - inspect(INSPECT_MODE_IDA64); + inspect(INSPECT_MODE_EXTERNAL64); } void UEFITool::inspect(const UINT8 mode) { - if((mode == INSPECT_MODE_IDA32 && idaPath32.trimmed().isEmpty()) || - (mode == INSPECT_MODE_IDA64 && idaPath64.trimmed().isEmpty())) + if((mode == INSPECT_MODE_EXTERNAL32 && externalEditorPath32.trimmed().isEmpty()) || + (mode == INSPECT_MODE_EXTERNAL64 && externalEditorPath64.trimmed().isEmpty())) return; UString filePath; @@ -759,8 +760,8 @@ void UEFITool::inspect(const UINT8 mode) QStringList arg; arg << filePath; - if(!QProcess::startDetached(mode == INSPECT_MODE_IDA32 ? idaPath32 : idaPath64, arg)) { - QMessageBox::critical(this, tr("Inspect failed"), tr("Can't start IDA process"), QMessageBox::Ok); + if(!QProcess::startDetached(mode == INSPECT_MODE_EXTERNAL32 ? externalEditorPath32 : externalEditorPath64, arg)) { + QMessageBox::critical(this, tr("Inspect failed"), tr("Can't start external editor process"), QMessageBox::Ok); return; } } @@ -919,41 +920,30 @@ void UEFITool::openImageFile(UString path) currentPath = path; } -void UEFITool::specifyPathIDA() -{ - specifyPathIDA32(); - specifyPathIDA64(); -} - -void UEFITool::specifyPathIDA32() +void UEFITool::specifyPathExternalEditor32() { UString path; #if defined Q_OS_WIN - path = QFileDialog::getOpenFileName(this, tr("Specify path to ida.exe"), "ida.exe", tr("IDA Pro executable (ida.exe);;All files (*)")); + path = QFileDialog::getOpenFileName(this, tr("Specify path to 32-bit external editor executable"), "C:", tr("External editor executable (*.exe);;All files (*)")); #else - path = QFileDialog::getOpenFileName(this, tr("Specify path to ida binary"), "ida", tr("IDA Pro executable (ida);;All files (*)")); + path = QFileDialog::getOpenFileName(this, tr("Specify path to 32-bit external editor binary"), "/", tr("All files (*)")); #endif - if (path.trimmed().isEmpty()) - return; - idaPath32 = path; + externalEditorPath32 = path; } -void UEFITool::specifyPathIDA64() +void UEFITool::specifyPathExternalEditor64() { UString path; #if defined Q_OS_WIN - path = QFileDialog::getOpenFileName(this, tr("Specify path to ida64.exe"), "ida64.exe", tr("IDA Pro 64 executable (ida64.exe);;All files (*)")); + path = QFileDialog::getOpenFileName(this, tr("Specify path to 64-bit external editor executable"), "C:", tr("External editor executable (*.exe);;All files (*)")); #else - path = QFileDialog::getOpenFileName(this, tr("Specify path to ida64 binary"), "ida64", tr("IDA Pro 64 executable (ida64);;All files (*)")); + path = QFileDialog::getOpenFileName(this, tr("Specify path to 64-bit external editor binary"), "/", tr("All files (*)")); #endif - if (path.trimmed().isEmpty()) - return; - - idaPath64 = path; + externalEditorPath64 = path; } void UEFITool::enableMessagesCopyActions(QListWidgetItem* item) @@ -1170,9 +1160,9 @@ void UEFITool::readSettings() markingEnabled = settings.value("tree/markingEnabled", true).toBool(); ui->actionToggleBootGuardMarking->setChecked(markingEnabled); - // Get IDA Path - idaPath32 = settings.value("idaPath32").toString(); - idaPath64 = settings.value("idaPath64").toString(); + // Get external editor path + externalEditorPath32 = settings.value("externalEditorPath32").toString(); + externalEditorPath64 = settings.value("externalEditorPath64").toString(); // Set monospace font for some controls UString fontName; @@ -1218,8 +1208,8 @@ void UEFITool::writeSettings() settings.setValue("tree/markingEnabled", markingEnabled); settings.setValue("mainWindow/fontName", currentFont.family()); settings.setValue("mainWindow/fontSize", currentFont.pointSize()); - settings.setValue("idaPath32", idaPath32); - settings.setValue("idaPath64", idaPath64); + settings.setValue("externalEditorPath32", externalEditorPath32); + settings.setValue("externalEditorPath64", externalEditorPath64); } void UEFITool::showFitTable() diff --git a/UEFITool/uefitool.h b/UEFITool/uefitool.h index 2fb0208..c6124b9 100644 --- a/UEFITool/uefitool.h +++ b/UEFITool/uefitool.h @@ -77,9 +77,8 @@ private slots: void openImageFileInNewWindow(); void saveImageFile(); - void specifyPathIDA(); - void specifyPathIDA32(); - void specifyPathIDA64(); + void specifyPathExternalEditor32(); + void specifyPathExternalEditor64(); void search(); void goToOffset(); @@ -107,8 +106,8 @@ private slots: void remove(); - void inspectIDA32(); - void inspectIDA64(); + void inspectExternalEditor32(); + void inspectExternalEditor64(); void inspect(const UINT8 mode); void copyMessage(); @@ -147,8 +146,8 @@ private: QString currentDir; QString currentPath; QString currentProgramPath; - QString idaPath32; - QString idaPath64; + QString externalEditorPath32; + QString externalEditorPath64; QFont currentFont; const QString version; bool markingEnabled; diff --git a/UEFITool/uefitool.ui b/UEFITool/uefitool.ui index 896431e..8dd0d92 100644 --- a/UEFITool/uefitool.ui +++ b/UEFITool/uefitool.ui @@ -328,7 +328,8 @@ - + + @@ -426,9 +427,6 @@ - - - @@ -449,6 +447,8 @@ + + @@ -912,28 +912,36 @@ Ctrl+Alt+D - + true - Specify path to IDA Pro + Specify external editor path (32-bit) - + + true + + + Specify external editor path (64-bit) + + + + false - Inspect body with IDA + External editor view (32-bit) - - + + false - Inspect body with IDA64 + External editor view (64-bit) diff --git a/common/basetypes.h b/common/basetypes.h index b09ff66..ace0442 100644 --- a/common/basetypes.h +++ b/common/basetypes.h @@ -138,8 +138,8 @@ typedef ptrdiff_t INTN; #define EXTRACT_MODE_BODY_UNCOMPRESSED 2 // Item inspect modes -#define INSPECT_MODE_IDA32 0 -#define INSPECT_MODE_IDA64 1 +#define INSPECT_MODE_EXTERNAL32 0 +#define INSPECT_MODE_EXTERNAL64 1 // Item replace modes #define REPLACE_MODE_AS_IS 0