From fa7bebc0d69e4edf942dc5d5e5ac141902c35d29 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Wed, 7 Aug 2024 18:55:13 +0200 Subject: [PATCH 1/2] Update cppcheckexecutorseh.cpp --- cli/cppcheckexecutorseh.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/cli/cppcheckexecutorseh.cpp b/cli/cppcheckexecutorseh.cpp index f43091d8706..ed8b0bc8b0f 100644 --- a/cli/cppcheckexecutorseh.cpp +++ b/cli/cppcheckexecutorseh.cpp @@ -78,20 +78,23 @@ namespace { ); CONTEXT context = *(ex->ContextRecord); STACKFRAME64 stack= {0}; -#ifdef _M_IX86 + stack.AddrPC.Mode = AddrModeFlat; + stack.AddrStack.Mode = AddrModeFlat; + stack.AddrFrame.Mode = AddrModeFlat; +#if defined(_M_IX86) stack.AddrPC.Offset = context.Eip; - stack.AddrPC.Mode = AddrModeFlat; stack.AddrStack.Offset = context.Esp; - stack.AddrStack.Mode = AddrModeFlat; stack.AddrFrame.Offset = context.Ebp; - stack.AddrFrame.Mode = AddrModeFlat; -#else +#elif defined(_M_AMD64) stack.AddrPC.Offset = context.Rip; - stack.AddrPC.Mode = AddrModeFlat; stack.AddrStack.Offset = context.Rsp; - stack.AddrStack.Mode = AddrModeFlat; stack.AddrFrame.Offset = context.Rsp; - stack.AddrFrame.Mode = AddrModeFlat; +#elif defined(_M_ARM64) + stack.AddrPC.Offset = context.Pc; + stack.AddrStack.Offset = context.Sp; + stack.AddrFrame.Offset = context.Fp; +#else +#error Platform not supported! #endif IMAGEHLP_SYMBOL64_EXT symbol; symbol.SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64); @@ -101,10 +104,12 @@ namespace { for (ULONG frame = 0; ; frame++) { BOOL result = pStackWalk64 ( -#ifdef _M_IX86 +#if defined(_M_IX86) IMAGE_FILE_MACHINE_I386, -#else +#elif defined(_M_AMD64) IMAGE_FILE_MACHINE_AMD64, +#elif defined(_M_ARM64) + IMAGE_FILE_MACHINE_ARM64, #endif hProcess, hThread, From 13490bb25c9a6707d5b76d025cf0cfc126887d50 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Wed, 7 Aug 2024 18:56:37 +0200 Subject: [PATCH 2/2] Update cppcheckexecutorseh.cpp --- cli/cppcheckexecutorseh.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/cppcheckexecutorseh.cpp b/cli/cppcheckexecutorseh.cpp index ed8b0bc8b0f..4de4a67c56d 100644 --- a/cli/cppcheckexecutorseh.cpp +++ b/cli/cppcheckexecutorseh.cpp @@ -78,7 +78,7 @@ namespace { ); CONTEXT context = *(ex->ContextRecord); STACKFRAME64 stack= {0}; - stack.AddrPC.Mode = AddrModeFlat; + stack.AddrPC.Mode = AddrModeFlat; stack.AddrStack.Mode = AddrModeFlat; stack.AddrFrame.Mode = AddrModeFlat; #if defined(_M_IX86)