103 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| #include "pch.h"
 | |
| #include "hook.h"
 | |
| 
 | |
| #include "sock.h"
 | |
| #include "MinHook.h"
 | |
| #include "squirrel.h"
 | |
| 
 | |
| #pragma comment(lib, "libMinHook.x86.lib")
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| uint32_t hook::H_Register_Nut(uint32_t v, void* f, int freeVarsCnt)
 | |
| {
 | |
| 
 | |
|     static int build = 0;
 | |
|     if (build == 0 && f == (void*)0x005C5980)
 | |
|     {
 | |
|         squirrel::R_Register_Nut();
 | |
|     }
 | |
|     return MLnewclosure(v, f, freeVarsCnt);
 | |
| }
 | |
| 
 | |
| 
 | |
| void hook::H_Register_Pack(void* Ecx)
 | |
| {
 | |
|     Lpfn_Init(Ecx);
 | |
|     sock::R_Register_Pack();
 | |
| }
 | |
| 
 | |
| 
 | |
| std::map<wchar_t*, int> bufferm;
 | |
| static SqPushRootFunc* yuancall;
 | |
| 
 | |
| uint32_t ThFunc(uint32_t v)
 | |
| {
 | |
| 
 | |
|     int a = yuancall(v);
 | |
|     //std::cout << u8"参数个数" << params << std::endl;
 | |
|         //SQ_Get(v, -2);
 | |
|         
 | |
|         //std::cout <<u8"参数个数为" << ParameterNum - 1 << std::endl;
 | |
| 
 | |
|             for (int i = -3; i < 3; ++i)
 | |
|             {
 | |
|                 
 | |
|                 if (SQ_GetType(v, i) == 134217744)
 | |
|                 {
 | |
|                     
 | |
|                     wchar_t* Name;
 | |
|                     SQGetString(v, i, &Name);
 | |
|                     if (bufferm.count(Name) == 0)
 | |
|                     {
 | |
|                         bufferm[Name] = 1;
 | |
|                         std::wcout << u8"参数为" << Name << std::endl;
 | |
|                     }
 | |
|                     
 | |
|                 }
 | |
|                 
 | |
|             }
 | |
|         
 | |
|         //SQPrintFunc(v);
 | |
|         return a;
 | |
| }
 | |
| 
 | |
| int hook::RegisterHook()
 | |
| {
 | |
|     MH_Initialize();
 | |
|     MH_CreateHook((void*)INIT_PACK_ADDRESS, &H_Register_Pack, reinterpret_cast<void**>(&Lpfn_Init));
 | |
| 
 | |
|     MH_CreateHook((void*)INIT_NUT_ADDRESS, &H_Register_Nut, reinterpret_cast<void**>(&MLnewclosure));
 | |
| 
 | |
| 
 | |
|     MH_CreateHook((void*)0x1358C50, &ThFunc, reinterpret_cast<void**>(&yuancall));
 | |
| 
 | |
|     MH_EnableHook((void*)INIT_PACK_ADDRESS);
 | |
|     MH_EnableHook((void*)INIT_NUT_ADDRESS);
 | |
|    
 | |
| 
 | |
|     //MH_EnableHook((void*)0x1358C50);
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| int hook::InitGameScript()
 | |
| {
 | |
|     MH_EnableHook((void*)0x1359280);
 | |
|     /*
 | |
|     uint32_t v = GetSqVm();
 | |
|     SQPushRootTable(v);
 | |
|     SQPushString(v, L"SetHudUI", -1);
 | |
|     SQ_Get(v, -2);
 | |
|     SQPushRootTable(v);
 | |
|     SQPushString(v, L"1.cpp", -1);
 | |
|     SQ_Call(v, 2, 1, 0);
 | |
|     SQPop(v, 2);
 | |
| 
 | |
| 
 | |
|    
 | |
|     std::cout << u8"调用成功" << std::endl;
 | |
|     */
 | |
|     return 0;
 | |
| }
 |