#include "dispatch.h" #define MAIN_OFFSET(offset) ((void *)((0x8048000) + (offset))) #define SUBHOOK_INIT(func, addr) \ fn##func func = (fn##func)addr; \ FuncHook h##func #define SUBHOOK_SETUP(func) h##func.Hook((void **)&func, (void *)_##func) class Controller { public: SINGLETON_DEFINE_S(Controller); private: Controller(); ~Controller(); public: void init(); private: static int hook_IPacketDispatcher_ParamBase_dispatch_template(int a1, int a2, int a3); /** * @brief hook修复镶嵌徽章 * @param pDispatcher_UseJewel * @param pUser * @param pBuf * @return */ static int hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* pUser, PacketBuf* pBuf); //使用蜜蜡 static int hook_Dispatcher_ModItemAttr_dispatch_sig(Dispatcher_ModItemAttr* dis_mod, CUser* user, PacketBuf* pBuf); /** * @brief hook收包处理 * @param a1 * @param a2 * @param a3 * @param a4 * @param src * @param a6 * @param a7 * @param a8 * @return */ static int hook_PacketDispatcher_doDispatch(PacketDispatcher* a1, CUser* a2, int a3, int packet_id, char* packet_src, int pecakt_len, int a7, int a8); private: using IPacketDispatcher_ParamBase_dispatch_template_Type = decltype(hook_IPacketDispatcher_ParamBase_dispatch_template); IPacketDispatcher_ParamBase_dispatch_template_Type* old_IPacketDispatcher_ParamBase_dispatch_template; using UseJewel_dispatch_sig_Type = decltype(hook_UseJewel_dispatch_sig); UseJewel_dispatch_sig_Type* old_UseJewel_dispatch_sig; using Dispatcher_ModItemAttr_dispatch_sig_Type = decltype(hook_Dispatcher_ModItemAttr_dispatch_sig); Dispatcher_ModItemAttr_dispatch_sig_Type* old_Dispatcher_ModItemAttr_dispatch_sig; using PacketDispatcher_doDispatch_Type = decltype(hook_PacketDispatcher_doDispatch); PacketDispatcher_doDispatch_Type* old_PacketDispatcher_doDispatch; private: FuncHook mhook_IPacketDispatcher_ParamBase_dispatch_template; FuncHook mhook_UseJewel_dispatch_sig; FuncHook mhook_Dispatcher_ModItemAttr_dispatch_sig; FuncHook mhook_PacketDispatcher_doDispatch; };