summaryrefslogtreecommitdiff
path: root/view/pe
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2024-08-02 13:12:18 -0400
committerPeter LaFosse <peter@vector35.com>2024-08-08 10:17:26 -0400
commit44ff0cfd6bd87e4fbd8458502bd9dccb4c9cf938 (patch)
tree720aa2eeb5f56be060a8845a6badf1eaf0fc8189 /view/pe
parenta8725d0d107174d78a6ef52c5d950935f2081d2a (diff)
Add workflow for identifying TerminateProcess(GetCurrentProcess)
Diffstat (limited to 'view/pe')
-rw-r--r--view/pe/peview.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/view/pe/peview.cpp b/view/pe/peview.cpp
index 8c2f3020..98cef6ed 100644
--- a/view/pe/peview.cpp
+++ b/view/pe/peview.cpp
@@ -2782,6 +2782,16 @@ bool PEView::Init()
m_logger->LogWarn("Failed to parse resource directory: %s\n", e.what());
}
+ Ref<Settings> programSettings = Settings::Instance();
+ if (programSettings->Contains("core.function.analyzeConditionalNoReturns") &&
+ opt.subsystem != IMAGE_SUBSYSTEM_NATIVE && (
+ GetSymbolByRawName("TerminateProcess", GetExternalNameSpace()) ||
+ GetSymbolByRawName("_TerminateProcess@8", GetExternalNameSpace())))
+ {
+ // TerminateProcess is imported and this is a user mode file
+ programSettings->Set("corePlugins.workflows.conditionalNoReturn", true);
+ }
+
// Add a symbol for the entry point
if (m_entryPoint)
DefineAutoSymbol(new Symbol(FunctionSymbol, "_start", m_imageBase + m_entryPoint));