goldsrc-cheat/src/main.c

67 lines
1.5 KiB
C
Raw Normal View History

2023-07-19 13:39:50 -04:00
#include <stdio.h>
#include <dlfcn.h>
#include "include/main.h"
#include "include/sdk.h"
#include "include/globals.h"
2023-07-21 07:44:53 -04:00
#include "include/cvars.h"
#include "include/hooks.h"
2023-07-19 13:39:50 -04:00
2023-07-21 01:02:38 -04:00
static bool loaded = false;
2023-07-19 14:24:34 -04:00
/*
* We need:
* __attribute__((constructor))
* To indicate that this function will be the entry point once injected.
*/
2023-07-19 13:39:50 -04:00
__attribute__((constructor)) void load(void) {
printf("hl-cheat injected!\n");
/* Initialize globals/interfaces */
if (!globals_init()) {
fprintf(stderr, "hl-cheat: load: error loading globals, aborting\n");
self_unload();
return;
}
2023-07-21 07:44:53 -04:00
/* Create cvars for settings */
if (!cvars_init()) {
fprintf(stderr, "hl-cheat: load: error creating cvars, aborting\n");
self_unload();
return;
}
/* Hook functions */
if (!hooks_init()) {
fprintf(stderr, "hl-cheat: load: error hooking functions, aborting\n");
self_unload();
return;
}
i_engine->pfnClientCmd("echo \"hl-cheat loaded successfully!\"");
2023-07-21 01:02:38 -04:00
loaded = true;
}
__attribute__((destructor)) void unload() {
if (loaded)
globals_restore();
printf("hl-cheat unloaded.\n\n");
}
void self_unload(void) {
/*
* RTLD_LAZY: If the symbol is never referenced, then it is never resolved.
* RTLD_NOLOAD: Don't load the shared object.
*/
void* self = dlopen("libhlcheat.so", RTLD_LAZY | RTLD_NOLOAD);
/* Close the call we just made to dlopen() */
dlclose(self);
/* Close the call our injector made */
dlclose(self);
2023-07-19 13:39:50 -04:00
}