From dfcf3d8bd16d2faddca626528b4b67b77a657517 Mon Sep 17 00:00:00 2001 From: Tau Date: Sat, 19 Oct 2019 16:15:14 -0400 Subject: [PATCH] hooklib/spike.c: Add a measure of configurability --- cardhook/dllmain.c | 3 +-- chunihook/dllmain.c | 2 +- divahook/dllmain.c | 2 +- hooklib/spike.c | 48 +++++++++++++++++++++++++++++++++++++++++---- hooklib/spike.h | 4 +++- idzhook/dllmain.c | 2 +- minihook/dllmain.c | 3 +-- mu3hook/dllmain.c | 2 +- 8 files changed, 53 insertions(+), 13 deletions(-) diff --git a/cardhook/dllmain.c b/cardhook/dllmain.c index f9f5cb7..ad67a27 100644 --- a/cardhook/dllmain.c +++ b/cardhook/dllmain.c @@ -25,13 +25,12 @@ static DWORD CALLBACK app_pre_startup(void) aime_config_load(&app_aime_config, L".\\segatools.ini"); dns_config_load(&app_dns_config, L".\\segatools.ini"); + spike_hook_init(L".\\segatools.ini"); serial_hook_init(); sg_reader_hook_init(&app_aime_config, 12); dns_platform_hook_init(&app_dns_config); - spike_hook_init("cardspike.txt"); - dprintf("--- End %s ---\n", __func__); return app_startup(); diff --git a/chunihook/dllmain.c b/chunihook/dllmain.c index 22268cf..f2fc035 100644 --- a/chunihook/dllmain.c +++ b/chunihook/dllmain.c @@ -63,7 +63,7 @@ static DWORD CALLBACK chuni_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init("chunispike.txt"); + spike_hook_init(L".\\segatools.ini"); gfx_set_windowed(); dprintf("--- End chuni_pre_startup ---\n"); diff --git a/divahook/dllmain.c b/divahook/dllmain.c index 84f8177..f0b77ca 100644 --- a/divahook/dllmain.c +++ b/divahook/dllmain.c @@ -51,7 +51,7 @@ static DWORD CALLBACK diva_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init("divaspike.txt"); + spike_hook_init(L".\\segatools.ini"); dprintf("--- End diva_pre_startup ---\n"); diff --git a/hooklib/spike.c b/hooklib/spike.c index 09a64d4..f06166c 100644 --- a/hooklib/spike.c +++ b/hooklib/spike.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "hook/pe.h" @@ -11,6 +12,8 @@ #include "util/dprintf.h" +static void spike_hook_read_config(const wchar_t *spike_file); + /* Spike functions. Their "style" is named after the libc function they bear the closest resemblance to. */ @@ -133,7 +136,44 @@ static void spike_insert_log_levels(ptrdiff_t rva, size_t count) /* Config reader */ -void spike_hook_init(const char *path) +void spike_hook_init(const wchar_t *ini_file) +{ + wchar_t module[MAX_PATH]; + wchar_t path[MAX_PATH]; + const wchar_t *basename; + const wchar_t *slash; + + assert(ini_file != NULL); + + /* Get the filename (strip path) of the host EXE */ + + GetModuleFileNameW(NULL, module, _countof(module)); + slash = wcsrchr(module, L'\\'); + + if (slash != NULL) { + basename = slash + 1; + } else { + basename = module; + } + + /* Check our INI file to see if any spikes are configured for this EXE. + Normally we separate out config reading into a separate module... */ + + GetPrivateProfileStringW( + L"spike", + basename, + L"", + path, + _countof(path), + ini_file); + + if (path[0] != L'\0') { + dprintf("Spiking %S using config from %S\n", basename, path); + spike_hook_read_config(path); + } +} + +static void spike_hook_read_config(const wchar_t *spike_file) { int match; int count; @@ -142,14 +182,14 @@ void spike_hook_init(const char *path) char *ret; FILE *f; - f = fopen(path, "r"); + f = _wfopen(spike_file, L"r"); if (f == NULL) { + dprintf("Error opening spike file %S\n", spike_file); + return; } - dprintf("Found spike config, inserting spikes\n"); - for (;;) { ret = fgets(line, sizeof(line), f); diff --git a/hooklib/spike.h b/hooklib/spike.h index c5e851f..779d22f 100644 --- a/hooklib/spike.h +++ b/hooklib/spike.h @@ -1,3 +1,5 @@ #pragma once -void spike_hook_init(const char *path); +#include + +void spike_hook_init(const wchar_t *ini_file); diff --git a/idzhook/dllmain.c b/idzhook/dllmain.c index cbe5f54..f50ab49 100644 --- a/idzhook/dllmain.c +++ b/idzhook/dllmain.c @@ -49,7 +49,7 @@ static DWORD CALLBACK idz_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init("idzspike.txt"); + spike_hook_init(L".\\segatools.ini"); dprintf("--- End idz_pre_startup ---\n"); diff --git a/minihook/dllmain.c b/minihook/dllmain.c index 9f25ada..0c1512d 100644 --- a/minihook/dllmain.c +++ b/minihook/dllmain.c @@ -26,13 +26,12 @@ static DWORD CALLBACK app_pre_startup(void) clock_config_load(&clock_cfg, L".\\segatools.ini"); ds_config_load(&ds_cfg, L".\\segatools.ini"); nusec_config_load(&nusec_cfg, L".\\segatools.ini"); + spike_hook_init(L".\\segatools.ini"); clock_hook_init(&clock_cfg); nusec_hook_init(&nusec_cfg, "SSSS", "AAV0"); ds_hook_init(&ds_cfg); - spike_hook_init("minispike.txt"); - dprintf("--- End %s ---\n", __func__); return app_startup(); diff --git a/mu3hook/dllmain.c b/mu3hook/dllmain.c index 6f02f14..8b1be6d 100644 --- a/mu3hook/dllmain.c +++ b/mu3hook/dllmain.c @@ -41,7 +41,7 @@ static DWORD CALLBACK mu3_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init("mu3spike.txt"); + spike_hook_init(L".\\segatools.ini"); dprintf("--- End mu3_pre_startup ---\n");