mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-25 01:57:47 +01:00
dynamically load Dbghelp.dll
This commit is contained in:
parent
5336f7d1ec
commit
d680af0a4a
2
Makefile
2
Makefile
@ -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)
|
||||||
|
@ -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%" >> %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%" >> %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>
|
||||||
|
69
src/debug.c
69
src/debug.c
@ -39,51 +39,64 @@ 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 dmp =
|
HANDLE,
|
||||||
CreateFile(
|
DWORD,
|
||||||
g_dbg_crash_count == 1 ? g_dbg_dmp_path1 : g_dbg_dmp_path2,
|
HANDLE,
|
||||||
GENERIC_READ | GENERIC_WRITE,
|
MINIDUMP_TYPE,
|
||||||
FILE_SHARE_WRITE | FILE_SHARE_READ,
|
PMINIDUMP_EXCEPTION_INFORMATION,
|
||||||
0,
|
PMINIDUMP_USER_STREAM_INFORMATION,
|
||||||
CREATE_ALWAYS,
|
PMINIDUMP_CALLBACK_INFORMATION
|
||||||
0,
|
);
|
||||||
0);
|
|
||||||
|
|
||||||
if (dmp != INVALID_HANDLE_VALUE)
|
MiniDumpWriteDumpProc = (void*)real_GetProcAddress(real_LoadLibraryA("Dbghelp.dll"), "MiniDumpWriteDump");
|
||||||
|
if (MiniDumpWriteDumpProc)
|
||||||
{
|
{
|
||||||
MINIDUMP_EXCEPTION_INFORMATION info;
|
HANDLE dmp =
|
||||||
info.ThreadId = GetCurrentThreadId();
|
CreateFile(
|
||||||
info.ExceptionPointers = exception;
|
g_dbg_crash_count == 1 ? g_dbg_dmp_path1 : g_dbg_dmp_path2,
|
||||||
info.ClientPointers = TRUE;
|
GENERIC_READ | GENERIC_WRITE,
|
||||||
|
FILE_SHARE_WRITE | FILE_SHARE_READ,
|
||||||
|
0,
|
||||||
|
CREATE_ALWAYS,
|
||||||
|
0,
|
||||||
|
0);
|
||||||
|
|
||||||
MiniDumpWriteDump(
|
if (dmp != INVALID_HANDLE_VALUE)
|
||||||
GetCurrentProcess(),
|
{
|
||||||
GetCurrentProcessId(),
|
MINIDUMP_EXCEPTION_INFORMATION info;
|
||||||
dmp,
|
info.ThreadId = GetCurrentThreadId();
|
||||||
0,
|
info.ExceptionPointers = exception;
|
||||||
&info,
|
info.ClientPointers = TRUE;
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
CloseHandle(dmp);
|
MiniDumpWriteDump(
|
||||||
|
GetCurrentProcess(),
|
||||||
|
GetCurrentProcessId(),
|
||||||
|
dmp,
|
||||||
|
0,
|
||||||
|
&info,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
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",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user