crlib: reworked detours.

This commit is contained in:
dmitry 2020-06-21 09:45:09 +03:00
commit 419626df0e
13 changed files with 274 additions and 205 deletions

View file

@ -621,27 +621,26 @@ public:
class EntityLinkage : public Singleton <EntityLinkage> {
private:
#if defined (CR_WINDOWS)
# define HOOK_FUNCTION GetProcAddress
# define HOOK_CAST HMODULE
# define DETOUR_FUNCTION GetProcAddress
# define DETOUR_RETURN FARPROC
# define DETOUR_HANDLE HMODULE
#else
# define HOOK_FUNCTION dlsym
# define HOOK_CAST SharedLibrary::Handle
# define DETOUR_FUNCTION dlsym
# define DETOUR_RETURN SharedLibrary::Handle
# define DETOUR_HANDLE SharedLibrary::Handle
#endif
private:
SharedLibrary m_self;
SimpleHook m_dlsym;
HashMap <StringRef, SharedLibrary::Handle> m_exports;
Detour <decltype (DETOUR_FUNCTION)> m_dlsym { "kernel32.dll", "GetProcAddress", DETOUR_FUNCTION };
HashMap <StringRef, DETOUR_RETURN> m_exports;
public:
EntityLinkage () = default;
~EntityLinkage () {
m_dlsym.disable ();
}
public:
void initialize ();
SharedLibrary::Handle lookup (SharedLibrary::Handle module, const char *function);
DETOUR_RETURN lookup (SharedLibrary::Handle module, const char *function);
public:
void callPlayerFunction (edict_t *ent) {
@ -653,7 +652,7 @@ public:
}
public:
static SharedLibrary::Handle CR_STDCALL CR_STDCALL replacement (SharedLibrary::Handle module, const char *function) {
static DETOUR_RETURN CR_STDCALL replacement (SharedLibrary::Handle module, const char *function) {
return EntityLinkage::instance ().lookup (module, function);
}
};

View file

@ -38,7 +38,7 @@ private:
HashMap <int32, String> m_weaponAlias;
HashMap <String, int32> m_noiseCache;
SimpleHook m_sendToHook;
Detour <decltype (sendto)> m_sendToDetour { "ws2_32.dll", "sendto", sendto };
public:
BotSupport ();
@ -134,12 +134,7 @@ public:
// disables send hook
bool disableSendTo () {
return m_sendToHook.disable ();
}
// enables send hook
bool enableSendTo () {
return m_sendToHook.enable ();
return m_sendToDetour.restore ();
}
// gets the shooting cone deviation