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;
|
|
}
|