fix build
This commit is contained in:
		
							parent
							
								
									7a9e0c973d
								
							
						
					
					
						commit
						cc15c3479f
					
				
							
								
								
									
										90
									
								
								vhook.cpp
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								vhook.cpp
									
									
									
									
									
								
							@ -7,6 +7,7 @@ SourceHook::IHookManagerAutoGen *g_pHookManager = NULL;
 | 
				
			|||||||
ke::Vector<DHooksManager *> g_pHooks;
 | 
					ke::Vector<DHooksManager *> g_pHooks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace SourceHook;
 | 
					using namespace SourceHook;
 | 
				
			||||||
 | 
					using namespace sp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef  WIN32
 | 
					#ifdef  WIN32
 | 
				
			||||||
#define OBJECT_OFFSET sizeof(void *)
 | 
					#define OBJECT_OFFSET sizeof(void *)
 | 
				
			||||||
@ -14,6 +15,95 @@ using namespace SourceHook;
 | 
				
			|||||||
#define OBJECT_OFFSET (sizeof(void *)*2)
 | 
					#define OBJECT_OFFSET (sizeof(void *)*2)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef  WIN32
 | 
				
			||||||
 | 
					void *GenerateThunk(ReturnType type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						sp::MacroAssembler masm;
 | 
				
			||||||
 | 
						static const size_t kStackNeeded = (2) * 4; // 2 args max
 | 
				
			||||||
 | 
						static const size_t kReserve = ke::Align(kStackNeeded+8, 16)-8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						masm.push(ebp);
 | 
				
			||||||
 | 
						masm.movl(ebp, esp);
 | 
				
			||||||
 | 
						masm.subl(esp, kReserve);
 | 
				
			||||||
 | 
						if(type != ReturnType_String && type != ReturnType_Vector)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							masm.lea(eax, Operand(ebp, 12)); // grab the incoming caller argument vector
 | 
				
			||||||
 | 
							masm.movl(Operand(esp, 1 * 4), eax); // set that as the 2nd argument
 | 
				
			||||||
 | 
							masm.movl(eax, Operand(ebp, 8)); // grab the |this|
 | 
				
			||||||
 | 
							masm.movl(Operand(esp, 0 * 4), eax); // set |this| as the 1st argument*/
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							masm.lea(eax, Operand(ebp, 8)); // grab the incoming caller argument vector
 | 
				
			||||||
 | 
							masm.movl(Operand(esp, 1 * 4), eax); // set that as the 2nd argument
 | 
				
			||||||
 | 
							masm.movl(eax, Operand(ebp, 12)); // grab the |this|
 | 
				
			||||||
 | 
							masm.movl(Operand(esp, 0 * 4), eax); // set |this| as the 1st argument*/
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if(type == ReturnType_Float)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							masm.call(ExternalAddress((void *)Callback_float));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if(type == ReturnType_Vector)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							masm.call(ExternalAddress((void *)Callback_vector));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if(type == ReturnType_String)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							masm.call(ExternalAddress((void *)Callback_stringt));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							masm.call(ExternalAddress((void *)Callback));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						masm.addl(esp, kReserve);
 | 
				
			||||||
 | 
						masm.pop(ebp); // restore ebp
 | 
				
			||||||
 | 
						masm.ret();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void *base =  g_pSM->GetScriptingEngine()->AllocatePageMemory(masm.length());
 | 
				
			||||||
 | 
						masm.emitToExecutableMemory(base);
 | 
				
			||||||
 | 
						return base;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					// HUGE THANKS TO BAILOPAN (dvander)!
 | 
				
			||||||
 | 
					void *GenerateThunk(ReturnType type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						sp::MacroAssembler masm;
 | 
				
			||||||
 | 
						static const size_t kStackNeeded = (3 + 1) * 4; // 3 args max, 1 locals max
 | 
				
			||||||
 | 
						static const size_t kReserve = ke::Align(kStackNeeded+8, 16)-8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						masm.push(ebp);
 | 
				
			||||||
 | 
						masm.movl(ebp, esp);
 | 
				
			||||||
 | 
						masm.subl(esp, kReserve);
 | 
				
			||||||
 | 
						masm.lea(eax, Operand(esp, 3 * 4)); // ptr to 2nd var after argument space
 | 
				
			||||||
 | 
						masm.movl(Operand(esp, 2 * 4), eax); // set the ptr as the third argument
 | 
				
			||||||
 | 
						masm.lea(eax, Operand(ebp, 8)); // grab the incoming caller argument vector
 | 
				
			||||||
 | 
						masm.movl(Operand(esp, 1 * 4), eax); // set that as the 2nd argument
 | 
				
			||||||
 | 
						masm.movl(Operand(esp, 0 * 4), ecx); // set |this| as the 1st argument
 | 
				
			||||||
 | 
						if(type == ReturnType_Float)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							masm.call(ExternalAddress(Callback_float));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if(type == ReturnType_Vector)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							masm.call(ExternalAddress(Callback_vector));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							masm.call(ExternalAddress(Callback));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						masm.movl(ecx, Operand(esp, 3*4));
 | 
				
			||||||
 | 
						masm.addl(esp, kReserve);
 | 
				
			||||||
 | 
						masm.pop(ebp); // restore ebp
 | 
				
			||||||
 | 
						masm.pop(edx); // grab return address in edx
 | 
				
			||||||
 | 
						masm.addl(esp, ecx); // remove arguments
 | 
				
			||||||
 | 
						masm.jmp(edx); // return to caller
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
						void *base =  g_pSM->GetScriptingEngine()->AllocatePageMemory(masm.length());
 | 
				
			||||||
 | 
						masm.emitToExecutableMemory(base);
 | 
				
			||||||
 | 
						return base;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DHooksManager::DHooksManager(HookSetup *setup, void *iface, IPluginFunction *remove_callback, IPluginFunction *plugincb, bool post)
 | 
					DHooksManager::DHooksManager(HookSetup *setup, void *iface, IPluginFunction *remove_callback, IPluginFunction *plugincb, bool post)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	this->callback = MakeHandler(setup->returnType);
 | 
						this->callback = MakeHandler(setup->returnType);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										90
									
								
								vhook.h
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								vhook.h
									
									
									
									
									
								
							@ -162,95 +162,7 @@ bool SetupHookManager(ISmmAPI *ismm);
 | 
				
			|||||||
void CleanupHooks(IPluginContext *pContext = NULL);
 | 
					void CleanupHooks(IPluginContext *pContext = NULL);
 | 
				
			||||||
size_t GetParamTypeSize(HookParamType type);
 | 
					size_t GetParamTypeSize(HookParamType type);
 | 
				
			||||||
SourceHook::PassInfo::PassType GetParamTypePassType(HookParamType type);
 | 
					SourceHook::PassInfo::PassType GetParamTypePassType(HookParamType type);
 | 
				
			||||||
 | 
					void *GenerateThunk(ReturnType type);
 | 
				
			||||||
#ifndef  WIN32
 | 
					 | 
				
			||||||
static void *GenerateThunk(ReturnType type)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	sp::MacroAssemblerX86 masm;
 | 
					 | 
				
			||||||
	static const size_t kStackNeeded = (2) * 4; // 2 args max
 | 
					 | 
				
			||||||
	static const size_t kReserve = ke::Align(kStackNeeded+8, 16)-8;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	masm.push(ebp);
 | 
					 | 
				
			||||||
	masm.movl(ebp, esp);
 | 
					 | 
				
			||||||
	masm.subl(esp, kReserve);
 | 
					 | 
				
			||||||
	if(type != ReturnType_String && type != ReturnType_Vector)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		masm.lea(eax, Operand(ebp, 12)); // grab the incoming caller argument vector
 | 
					 | 
				
			||||||
		masm.movl(Operand(esp, 1 * 4), eax); // set that as the 2nd argument
 | 
					 | 
				
			||||||
		masm.movl(eax, Operand(ebp, 8)); // grab the |this|
 | 
					 | 
				
			||||||
		masm.movl(Operand(esp, 0 * 4), eax); // set |this| as the 1st argument*/
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		masm.lea(eax, Operand(ebp, 8)); // grab the incoming caller argument vector
 | 
					 | 
				
			||||||
		masm.movl(Operand(esp, 1 * 4), eax); // set that as the 2nd argument
 | 
					 | 
				
			||||||
		masm.movl(eax, Operand(ebp, 12)); // grab the |this|
 | 
					 | 
				
			||||||
		masm.movl(Operand(esp, 0 * 4), eax); // set |this| as the 1st argument*/
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if(type == ReturnType_Float)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		masm.call(ExternalAddress((void *)Callback_float));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else if(type == ReturnType_Vector)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		masm.call(ExternalAddress((void *)Callback_vector));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else if(type == ReturnType_String)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		masm.call(ExternalAddress((void *)Callback_stringt));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		masm.call(ExternalAddress((void *)Callback));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	masm.addl(esp, kReserve);
 | 
					 | 
				
			||||||
	masm.pop(ebp); // restore ebp
 | 
					 | 
				
			||||||
	masm.ret();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void *base =  g_pSM->GetScriptingEngine()->AllocatePageMemory(masm.length());
 | 
					 | 
				
			||||||
	masm.emitToExecutableMemory(base);
 | 
					 | 
				
			||||||
	return base;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
// HUGE THANKS TO BAILOPAN (dvander)!
 | 
					 | 
				
			||||||
static void *GenerateThunk(ReturnType type)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	sp::MacroAssemblerX86 masm;
 | 
					 | 
				
			||||||
	static const size_t kStackNeeded = (3 + 1) * 4; // 3 args max, 1 locals max
 | 
					 | 
				
			||||||
	static const size_t kReserve = ke::Align(kStackNeeded+8, 16)-8;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	masm.push(ebp);
 | 
					 | 
				
			||||||
	masm.movl(ebp, esp);
 | 
					 | 
				
			||||||
	masm.subl(esp, kReserve);
 | 
					 | 
				
			||||||
	masm.lea(eax, Operand(esp, 3 * 4)); // ptr to 2nd var after argument space
 | 
					 | 
				
			||||||
	masm.movl(Operand(esp, 2 * 4), eax); // set the ptr as the third argument
 | 
					 | 
				
			||||||
	masm.lea(eax, Operand(ebp, 8)); // grab the incoming caller argument vector
 | 
					 | 
				
			||||||
	masm.movl(Operand(esp, 1 * 4), eax); // set that as the 2nd argument
 | 
					 | 
				
			||||||
	masm.movl(Operand(esp, 0 * 4), ecx); // set |this| as the 1st argument
 | 
					 | 
				
			||||||
	if(type == ReturnType_Float)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		masm.call(ExternalAddress(Callback_float));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else if(type == ReturnType_Vector)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		masm.call(ExternalAddress(Callback_vector));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		masm.call(ExternalAddress(Callback));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	masm.movl(ecx, Operand(esp, 3*4));
 | 
					 | 
				
			||||||
	masm.addl(esp, kReserve);
 | 
					 | 
				
			||||||
	masm.pop(ebp); // restore ebp
 | 
					 | 
				
			||||||
	masm.pop(edx); // grab return address in edx
 | 
					 | 
				
			||||||
	masm.addl(esp, ecx); // remove arguments
 | 
					 | 
				
			||||||
	masm.jmp(edx); // return to caller
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
	void *base =  g_pSM->GetScriptingEngine()->AllocatePageMemory(masm.length());
 | 
					 | 
				
			||||||
	masm.emitToExecutableMemory(base);
 | 
					 | 
				
			||||||
	return base;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static DHooksCallback *MakeHandler(ReturnType type)
 | 
					static DHooksCallback *MakeHandler(ReturnType type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user