1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-26 02:19:24 +01:00

dynamically load Dbghelp.dll

This commit is contained in:
FunkyFr3sh 2024-09-29 17:09:24 +02:00
parent 5336f7d1ec
commit d680af0a4a
3 changed files with 45 additions and 32 deletions

View File

@ -4,7 +4,7 @@ TARGET ?= ddraw.dll
LDFLAGS ?= -Wl,--enable-stdcall-fixup -s -static -shared LDFLAGS ?= -Wl,--enable-stdcall-fixup -s -static -shared
CFLAGS ?= -Iinc -O2 -Wall -std=c99 CFLAGS ?= -Iinc -O2 -Wall -std=c99
LIBS = -lgdi32 -lwinmm -ldbghelp -lole32 -lMsimg32 LIBS = -lgdi32 -lwinmm -lole32 -lMsimg32
COMMIT := $(shell git describe --match=NeVeRmAtCh --always --dirty || echo UNKNOWN) COMMIT := $(shell git describe --match=NeVeRmAtCh --always --dirty || echo UNKNOWN)
BRANCH := $(shell git rev-parse --abbrev-ref HEAD || echo UNKNOWN) BRANCH := $(shell git rev-parse --abbrev-ref HEAD || echo UNKNOWN)

View File

@ -222,7 +222,7 @@
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<AdditionalDependencies>dbghelp.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile> <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
</Link> </Link>
<PostBuildEvent> <PostBuildEvent>
@ -348,7 +348,7 @@ echo #define GIT_BRANCH "%GIT_BRANCH%" &gt;&gt; %DST_FILE%
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>dbghelp.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile> <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
</Link> </Link>
<PostBuildEvent> <PostBuildEvent>
@ -390,7 +390,7 @@ echo #define GIT_BRANCH "%GIT_BRANCH%" &gt;&gt; %DST_FILE%
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>dbghelp.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile> <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
</Link> </Link>
<PostBuildEvent> <PostBuildEvent>

View File

@ -39,7 +39,19 @@ LONG WINAPI dbg_exception_handler(EXCEPTION_POINTERS* exception)
{ {
g_dbg_crash_count++; g_dbg_crash_count++;
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K) BOOL(WINAPI * MiniDumpWriteDumpProc)(
HANDLE,
DWORD,
HANDLE,
MINIDUMP_TYPE,
PMINIDUMP_EXCEPTION_INFORMATION,
PMINIDUMP_USER_STREAM_INFORMATION,
PMINIDUMP_CALLBACK_INFORMATION
);
MiniDumpWriteDumpProc = (void*)real_GetProcAddress(real_LoadLibraryA("Dbghelp.dll"), "MiniDumpWriteDump");
if (MiniDumpWriteDumpProc)
{
HANDLE dmp = HANDLE dmp =
CreateFile( CreateFile(
g_dbg_crash_count == 1 ? g_dbg_dmp_path1 : g_dbg_dmp_path2, g_dbg_crash_count == 1 ? g_dbg_dmp_path1 : g_dbg_dmp_path2,
@ -68,22 +80,23 @@ LONG WINAPI dbg_exception_handler(EXCEPTION_POINTERS* exception)
CloseHandle(dmp); CloseHandle(dmp);
} }
#endif }
if (exception && exception->ExceptionRecord) if (exception && exception->ExceptionRecord)
{ {
HMODULE mod = NULL; HMODULE mod = NULL;
char filename[MAX_PATH] = { 0 }; char filename[MAX_PATH] = { 0 };
#if (_WIN32_WINNT >= _WIN32_WINNT_WINXP) BOOL(WINAPI * getModuleHandleExA)(DWORD, LPCSTR, HMODULE*) =
if (GetModuleHandleExA( (void*)real_GetProcAddress(real_LoadLibraryA("Kernel32.dll"), "GetModuleHandleExA");
if (getModuleHandleExA && getModuleHandleExA(
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
exception->ExceptionRecord->ExceptionAddress, exception->ExceptionRecord->ExceptionAddress,
&mod)) &mod))
{ {
GetModuleFileNameA(mod, filename, sizeof(filename) - 1); GetModuleFileNameA(mod, filename, sizeof(filename) - 1);
} }
#endif
TRACE( TRACE(
"Exception at %p (%p+%p), Code=%08X - %s\n", "Exception at %p (%p+%p), Code=%08X - %s\n",