summaryrefslogtreecommitdiff
path: root/view/pe
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2025-01-20 16:34:57 -0500
committerBrian Potchik <brian@vector35.com>2025-01-20 16:34:57 -0500
commitcbd4d7f12d54ddc4b6d3d90a8d7b49591f468a94 (patch)
tree7f3c44e5c16688ed032a9d963bbc116f9acf5c64 /view/pe
parent13e8a11adf4910c8871eb80a84f080652f76e72b (diff)
Allow overriding common loader settings when automatic load file parsing fails.
Diffstat (limited to 'view/pe')
-rw-r--r--view/pe/coffview.cpp8
-rw-r--r--view/pe/peview.cpp8
-rw-r--r--view/pe/teview.cpp16
3 files changed, 18 insertions, 14 deletions
diff --git a/view/pe/coffview.cpp b/view/pe/coffview.cpp
index 814c8cf2..4296917a 100644
--- a/view/pe/coffview.cpp
+++ b/view/pe/coffview.cpp
@@ -459,6 +459,10 @@ bool COFFView::Init()
m_logger->LogError("COFF architecture '0x%x' is not supported", header.machine);
break;
}
+
+ if (!m_parseOnly)
+ m_logger->LogWarn("Unable to determine architecture. Please open the file with options and select a valid architecture.");
+
return false;
}
@@ -1662,8 +1666,8 @@ Ref<Settings> COFFViewType::GetLoadSettingsForData(BinaryView* data)
Ref<BinaryView> viewRef = Parse(data);
if (!viewRef || !viewRef->Init())
{
- m_logger->LogError("View type '%s' could not be created", GetName().c_str());
- return nullptr;
+ m_logger->LogWarn("Failed to initialize view of type '%s'. Generating default load settings.", GetName().c_str());
+ viewRef = data;
}
Ref<Settings> settings = GetDefaultLoadSettingsForData(viewRef);
diff --git a/view/pe/peview.cpp b/view/pe/peview.cpp
index f0c43056..77c52da8 100644
--- a/view/pe/peview.cpp
+++ b/view/pe/peview.cpp
@@ -640,6 +640,10 @@ bool PEView::Init()
m_logger->LogError("PE architecture '0x%x' is not supported", header.machine);
break;
}
+
+ if (!m_parseOnly)
+ m_logger->LogWarn("Unable to determine architecture. Please open the file with options and select a valid architecture.");
+
return false;
}
@@ -3086,8 +3090,8 @@ Ref<Settings> PEViewType::GetLoadSettingsForData(BinaryView* data)
Ref<BinaryView> viewRef = Parse(data);
if (!viewRef || !viewRef->Init())
{
- m_logger->LogError("View type '%s' could not be created", GetName().c_str());
- return nullptr;
+ m_logger->LogWarn("Failed to initialize view of type '%s'. Generating default load settings.", GetName().c_str());
+ viewRef = data;
}
Ref<Settings> settings = GetDefaultLoadSettingsForData(viewRef);
diff --git a/view/pe/teview.cpp b/view/pe/teview.cpp
index f8666717..e5fb2a1b 100644
--- a/view/pe/teview.cpp
+++ b/view/pe/teview.cpp
@@ -257,16 +257,12 @@ bool TEView::Init()
break;
default:
LogError("TE platform '0x%x' is not supported", header.machine);
+ if (!m_parseOnly)
+ m_logger->LogWarn("Unable to determine architecture. Please open the file with options and select a valid architecture.");
return false;
}
}
- if (!platform)
- {
- LogError("Platform not supported by this version of Binary Ninja");
- return false;
- }
-
m_arch = platform->GetArchitecture();
if (!m_arch)
{
@@ -371,13 +367,13 @@ bool TEViewType::IsTypeValidForData(BinaryView* bv)
return false;
}
-Ref<Settings> TEViewType::GetLoadSettingsForData(BinaryView *bv)
+Ref<Settings> TEViewType::GetLoadSettingsForData(BinaryView* data)
{
- Ref<BinaryView> viewRef = Parse(bv);
+ Ref<BinaryView> viewRef = Parse(data);
if (!viewRef || !viewRef->Init())
{
- m_logger->LogError("View type '%s' could not be created", GetName().c_str());
- return nullptr;
+ m_logger->LogWarn("Failed to initialize view of type '%s'. Generating default load settings.", GetName().c_str());
+ viewRef = data;
}
// specify default load settings that can be overridden