Initial detour code.

This commit is contained in:
Ruben Gonzalez 2016-09-03 08:48:38 -04:00
parent a112f84e1f
commit 9437b653fa
5 changed files with 26 additions and 7 deletions

View File

@ -250,6 +250,7 @@ class MMSConfig(object):
compiler.cxxincludes += [
os.path.join(context.currentSourcePath),
os.path.join(context.currentSourcePath, 'sourcehook'),
os.path.join(context.currentSourcePath, 'detourhook'),
os.path.join(context.sourcePath, 'loader'),
]

View File

@ -24,7 +24,9 @@ for sdk_name in MMS.sdks:
'sourcehook/sourcehook_impl_cproto.cpp',
'sourcehook/sourcehook_impl_cvfnptr.cpp',
'gamedll_bridge.cpp',
'vsp_bridge.cpp'
'vsp_bridge.cpp',
'detourhook/detourhook.cpp',
'detourhook/asm/asm.c'
]
nodes = builder.Add(binary)
MMS.binaries += [nodes]

View File

@ -58,6 +58,7 @@ class ConCommandBase;
#define MMIFACE_SOURCEHOOK "ISourceHook" /**< ISourceHook Pointer */
#define MMIFACE_PLMANAGER "IPluginManager" /**< SourceMM Plugin Functions */
#define MMIFACE_SH_HOOKMANAUTOGEN "IHookManagerAutoGen" /**< SourceHook::IHookManagerAutoGen Pointer */
#define MMIFACE_DETOURHOOK "IDetourHook"
#define IFACE_MAXNUM 999 /**< Maximum interface version */
typedef void* (*CreateInterfaceFn)(const char *pName, int *pReturnCode);

View File

@ -35,6 +35,7 @@
*/
#include <sourcehook.h>
#include <detourhook.h>
#include <IPluginManager.h>
#include <ISmmAPI.h>
#include <ISmmPluginExt.h>
@ -433,8 +434,8 @@ using namespace SourceMM;
*
* @param name Deprecated - should be a variable name (like name).
* @param var Name of the variable that contains the singleton.
* This macro automatically takes the address of it, so
* you should not pass a pointer to your plugin's
* This macro automatically takes the address of it, so
* you should not pass a pointer to your plugin's
* singleton.
*/
#define PLUGIN_EXPOSE(name, var) \
@ -442,6 +443,7 @@ using namespace SourceMM;
ISmmPlugin *g_PLAPI = NULL; \
PluginId g_PLID = (PluginId)0; \
SourceHook::ISourceHook *g_SHPtr = NULL; \
DetourHook::IDetourHook *g_DHPtr = NULL; \
SMM_API void *PL_EXPOSURE(const char *name, int *code) { \
if (name && !strcmp(name, METAMOD_PLAPI_NAME)) { \
return static_cast<void *>(&var); \
@ -450,12 +452,13 @@ using namespace SourceMM;
}
/**
* @brief This should be in one of your header files, if you wish
* to use values like g_SHPtr in other files.
*/
/**
* @brief This should be in one of your header files, if you wish
* to use values like g_SHPtr in other files.
*/
#define PLUGIN_GLOBALVARS() \
extern SourceHook::ISourceHook *g_SHPtr; \
extern DetourHook::IDetourHook *g_DHPtr; \
extern ISmmAPI *g_SMAPI; \
extern ISmmPlugin *g_PLAPI; \
extern PluginId g_PLID;
@ -466,6 +469,7 @@ using namespace SourceMM;
#define PLUGIN_SAVEVARS() \
g_SMAPI = ismm; \
g_SHPtr = static_cast<SourceHook::ISourceHook *>(ismm->MetaFactory(MMIFACE_SOURCEHOOK, NULL, NULL)); \
g_DHPtr = static_cast<DetourHook::IDetourHook *>(ismm->MetaFactory(MMIFACE_DETOURHOOK, NULL, NULL)); \
g_PLAPI = static_cast<ISmmPlugin *>(this); \
g_PLID = id;

View File

@ -37,6 +37,7 @@
#if defined __linux__
#include <sys/stat.h>
#endif
#include "detourhook\detourhook_impl.h"
using namespace SourceMM;
using namespace SourceHook;
@ -109,6 +110,8 @@ MetamodSource g_Metamod;
PluginId g_PLID = Pl_Console;
CSourceHookImpl g_SourceHook;
ISourceHook *g_SHPtr = &g_SourceHook;
DetourHook::CDetourHookImpl g_DetourHook;
DetourHook::IDetourHook *g_DHPtr = &g_DetourHook;
SourceMM::ISmmAPI *g_pMetamod = &g_Metamod;
/* Helper Macro */
@ -845,6 +848,14 @@ void *MetamodSource::MetaFactory(const char *iface, int *ret, PluginId *id)
}
return static_cast<void *>(static_cast<SourceHook::ISourceHook *>(&g_SourceHook));
}
else if (strcmp(iface, MMIFACE_DETOURHOOK) == 0)
{
if (ret)
{
*ret = META_IFACE_OK;
}
return static_cast<void *>(static_cast<DetourHook::IDetourHook *>(&g_DetourHook));
}
else if (strcmp(iface, MMIFACE_PLMANAGER) == 0)
{
if (ret)