diff options
| author | Peter LaFosse <peter@vector35.com> | 2024-08-02 13:12:18 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2024-08-08 10:17:26 -0400 |
| commit | 44ff0cfd6bd87e4fbd8458502bd9dccb4c9cf938 (patch) | |
| tree | 720aa2eeb5f56be060a8845a6badf1eaf0fc8189 /view/pe | |
| parent | a8725d0d107174d78a6ef52c5d950935f2081d2a (diff) | |
Add workflow for identifying TerminateProcess(GetCurrentProcess)
Diffstat (limited to 'view/pe')
| -rw-r--r-- | view/pe/peview.cpp | 10 |
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)); |
