diff options
| author | Brian Potchik <brian@vector35.com> | 2025-01-20 16:34:57 -0500 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2025-01-20 16:34:57 -0500 |
| commit | cbd4d7f12d54ddc4b6d3d90a8d7b49591f468a94 (patch) | |
| tree | 7f3c44e5c16688ed032a9d963bbc116f9acf5c64 /view/pe | |
| parent | 13e8a11adf4910c8871eb80a84f080652f76e72b (diff) | |
Allow overriding common loader settings when automatic load file parsing fails.
Diffstat (limited to 'view/pe')
| -rw-r--r-- | view/pe/coffview.cpp | 8 | ||||
| -rw-r--r-- | view/pe/peview.cpp | 8 | ||||
| -rw-r--r-- | view/pe/teview.cpp | 16 |
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 |
